【问题标题】:Search for value in element with specific attribute在具有特定属性的元素中搜索值
【发布时间】:2018-10-02 19:49:57
【问题描述】:
<elemA>
  <elemZ mytype ="1">
    <myval>100</myval>
  </elemZ>
  <elemZ mytpe ="2">
    <myval>200</myval>
  </elemZ>
</elemA>

使用 cts:queries,我想在 elemZ with mytype = "1" 中找到 100 的 myval。我没有看到任何允许 cts:element-query 并且还过滤属性的 cts 查询。即使是 cts:and-query 似乎也没有帮助。

没有属性约束,元素值查询和两个元素查询将很容易工作。

cts:search(doc(), (some cts query?))

【问题讨论】:

    标签: xquery marklogic


    【解决方案1】:

    首先尝试这个简单的 xpath - 验证它是否有效,并且它的性能对您来说不够

    //elemZ[@mytype=1]/myval[. = "100" ]
    

    这应该返回 elemZ 的 myval 元素子元素,其中 mytype=1 和 myval text content = "100"

    为了做得更好(使用 cts:query)将需要那些“可怕的”其他 cts:queries 和可能的一些范围索引。 大致:(未经测试)

       search(doc(),
         cts:element-query(xs:QName("elemZ"),
           cts:and-query((
             cts:element-attribute-value-query(xs:QName("elemZ"), xs:QName("mytype"), "1"),
             cts:element-value-query(xs:QName("myval"), "100") )) ) )
    

    建议你从最简单的表达式开始anything,然后一一添加约束。

    在您的情况下,可以想象查询优化器会将简单的 xpath 优化为适当的 cts 查询。值得尝试和衡量性能。我个人喜欢从一个基本的 xpath 开始,然后根据需要只使用 cts:query。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-03
      • 2014-05-03
      • 1970-01-01
      • 2010-11-02
      • 2012-11-30
      相关资源
      最近更新 更多