0

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

例如:

示例 xml:

<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>

现在我希望所有包含123<id>的 xml,并且可以有空元素或根本不存在的元素。<root><root2><issue>, <volume>

与上述情况一样,它不应<root-second>以 root 身份返回 xmls。

它应该<root>以 root 身份返回所有 xml

4

1 回答 1

1

假设每个 XML 都在其自己的文档中,您应该能够这样做:

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

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

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())
    ))
  )
)
于 2017-02-15T21:44:05.380 回答