如何搜索元素中没有特定元素或具有空值的文档?

时间:2017-02-15 13:27:08

标签: xml marklogic marklogic-7

我想搜索没有特定元素的文档或没有子节点的元素(甚至是文本节点),该元素应该有一个特定的父节点。

例如:

示例xmls:

<root>
    <id>123</id>
    <root2>
        <number>1234</number>
    </root2>
</root>

<root>
    <id>123</id>
    <root2>
        <issue/>
        <number>1234</number>
    </root2>
</root>

<root>
    <id>123</id>
    <root2>
        <volume/>
        <number>1234</number>
    </root2>
</root>

<root-second>
    <id>123</id>
    <root2>
        <volume/>
        <issue/>
        <number>1234</number>
    </root2>
</root-second>

<root-second>
    <id>123</id>
    <root2>
        <volume/>
        <issue/>
        <number>1234</number>
    </root2>
</root-second>

新文档:

<root>
    <id>123</id>
    <root2>
        <volume>233</volume>
        <number>1234</number>
    </root2>
</root>
<root>
    <id>123</id>
    <root2>
        <volume>233</volume>
        <issue>233</issue>
        <number>1234</number>
    </root2>
</root>
<root>
     <id>123</id>
     <root2>
        <issue>233</issue>
        <number>1234</number>
      </root2>
</root>

现在我希望<id><root>的所有xmls 123 <root2>可以有空<issue>, <volume>个元素或元素完全存在。

与上述情况一样,它不应该以{{1​​}}为根返回xmls。

它应该以{{1​​}}为根

返回所有xmls

1 个答案:

答案 0 :(得分:1)

假设每个XML都在自己的文档中,您应该可以通过以下方式执行此操作:

cts:search(
  fn:doc(),
  cts:element-query(
    xs:QName("root"),
    cts:element-value-query(xs:QName("id"), "123")
  )
)

我对您的问题并不完全清楚,但我认为您可能也希望要求root2存在于root下,无论它包含什么。如果是这样的话,那么:

cts:search(
  fn:doc(),
  cts:element-query(
    xs:QName("root"),
    cts:and-query((
      cts:element-value-query(xs:QName("id"), "123"),
      cts:element-query(xs:QName("root2"), cts:true-query())
    ))
  )
)