2009-07-17 65 views
11

這應該是一個容易的,但它給我的麻煩。鑑於這種結構:Xpath只選擇子元素存在的節點?

<root> 
    <a> 
    <b/> 
    </a> 
    <a/> 
</root> 

我試圖制定一個XPath表達式,也就是說,只有非空「A」的元素,即有子元素的人。因此,我希望返回「a」的第一個實例,但不是第二個實例。

到目前爲止,我有「/ root/a/self :: *」,但是這是返回給我兩個a的。

+2

我還發現,這種作品: /root/a [child :: *] 但我會給阿德里安信貸的答案也行得通! :) – 2009-07-17 15:24:20

回答

12
/root/a[count(*)&gt;0] 

會給任何 'A' 節點與任何類型的子節點的

+5

就像一個額外的點,您可以使用計數(b)具體說明您要計算哪些子節點。 – 2013-07-10 10:52:00

6
/root/a[count(*)>0] 
+0

我認爲Adrian對編碼的需求是正確的。 – 2009-07-17 15:19:14

+3

僅限於您想將其放入XML文件(例如XSLT腳本)。但是,這只是一個存儲細節,我很確定XPath規範使用「>」:) – 2009-07-17 20:27:10

3

這一個工程

/root/a[*] 

甚至

//a[*] 
+0

或者如果您只關心名稱爲「b」的子元素:'/ root/a [b]' – Timothy 2015-11-11 18:54:04