2015-12-16 87 views
1

我需要一個XPath(1.0),以獲得與多個孩子的父節點,但只有一個類型的孩子(例如,或者<div><li>但不<div><li>) 。任何幫助?謝謝!XPath來獲得父母有多個孩子,但只有一個類型的子

<doc> 
    <tom> 
     <janet /> 
    </tom> 
    <dick> 
     <janet /> 
     <jane /> 
    </dick> 
    <harry> 
     <jane /> 
    </harry> 
</doc> 

所以,對上面我們應該得到湯姆和哈里但不傢伙

+3

一個例子將是非常有益的;-) – drkthng

+0

我不知道,一個例子是對這個問題特別有幫助,因爲它解決一般來說,如果有方法檢查子元素是否都是相同類型的。 – Nico21

回答

1

使用的例子作爲參考,以下XPath 1.0表達式:

/doc/*[count(./*) = count(./*[name(.) = name(../*[1])])]

將返回所有的孩子doc其中該元素的子女總數等於與該元素的第一個子女姓名相同的子女人數。或者更簡單地說,所有的孩子都有同樣的名字,也就是'類型'。

然而,上述將返回有0或1子節點,所以將其限制爲僅在有多個子節點,我們可以使用: /doc/*[count(./*) = count(./*[name(.) = name(../*[1])]) and count(./*) > 1]

如果您想進一步限制它,所有的孩子都在一定元素,例如jane,您可以使用:/doc/*[count(./*) = count(./*[name(.) = name(../*[1])]) and count(./*) > 1 and ./*[1] = ./jane[1]]

+0

非常聰明的解決方案,謝謝!我認爲'//*[count(./*)= count(./* [name(。)= name(../* [1])])和count(./*)> 1]'可以如果對路徑沒有進一步的限制,就認爲這是解決這個問題的辦法。 – Nico21

相關問題