2013-10-10 101 views
0

使用這個作爲例子的第一要素:的XPath - 只爲了每一個第二級元素

<root> 
    <gramps name="Bill"> 
    <him name="Bill Jr"> 
     <kid name="Bill III"/> 
    </him> 
    </gramps> 
    <gramps name="Tom"> 
    <him name="Al"> 
     <kid name="Al Jr"/> 
    </him> 
    </gramps> 
    <gramps name="Bob"> 
    <him name="Bob Jr"> 
     <kid name="Sam"/> 
    </him> 
    </gramps> 
    <store name="Tom's"/> 
    <store name="Bill's"/> 
    <store name="Pete's"/> 
</root> 

我可以得到所有的第二級元素的搭配:

/*/* 

我能得到名稱爲所有的第二級別的元素,gramps store,具有:

distinct-values(/*/*/name()) 

我怎樣才能得到的只是第一元素每個第二級元素造成:

<gramps name="Bill"> 
    <him name="Bill Jr"> 
     <kid name="Bill III"/> 
    </him> 
    <store name="Tom's"/> 

回答

4

你可以在每名檢查是否有以前的名稱相同:

/*/*[not(preceding-sibling::*/name() = name())] 

或者,可能更快,找到的第一個每個名稱:

for $name in distinct-values(/*/*/name()) return /*/*[name() = $name][1] 
+0

對於更大的示例,時間與您的聲明相符。 XPath:1500秒。 XQuery:1.5秒。 –

相關問題