2017-02-15 64 views
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> 

現在我希望讓所有個XML <id><root>是和<root2>可以有空的<issue>, <volume>元素或元素根本不存在。

正如在上面的情況下,它不應該返回xml與<root-second>作爲根。

它應與<root>返回所有個XML作爲根

回答

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()) 
    )) 
) 
) 
+0

大衛,我已經更新了我的問題。 我添加了新文檔(每個XML都在自己的文檔中)。 現在新增加的文檔不應該出現在結果中,因爲所有三個文檔都有,或兩個元素均以某個值(文本節點)存在。 是大衛應當出示下,它應該是父節點, 正如我的情況可以存在下,也是下(的兄弟姐妹) –

+0

CTS:真查詢()我不能使用這個,因爲我正在使用ML 7 –

+0

用cts:and-query(())替換cts:true-query()。 –

相關問題