2016-12-15 74 views
2

我對XPath並不完全熟悉。我進行了廣泛的搜索,只爲眼前的孩子找到了解決方案。對於文檔中沒有文本節點後代的所有元素的Xpath?

要求是選擇一個沒有任何孩子,大孩子,盛大孩子或其家族樹中存在文本節點的子元素。

一個簡單的例子是: -

<div><p></p><p><span></span></p><p><span>notemptychild</span></p><p>notempty</p></div> 

如果我運行下面的XPath查詢: -

//p[not(text())] 

它提供了以下的輸出: -

Element='<p/>' 
Element='<p> 
    <span/> 
</p>' 
Element='<p> 
    <span>notemptychild</span> 
</p>' 

(我使用freeformatter xpath工具:http://www.freeformatter.com/xpath-tester.html

第一個元素是一個有效的選擇。

第二個元素是一個有效的選擇。

第三個元素不是有效的選擇,因爲p的孩子span中有一個文本節點。

我希望我沒有提出複雜的問題。

回答

3

此XPath,

//*[not(.//text())] 

將選擇沒有文本節點文檔中的所有元素。


此XPath,

//*[not(.//text()[normalize-space()])] 

確實是由剛剛空白的相同,但允許文本節點。

+0

謝謝你。有用。我會盡快接受它。還有一個要求,我錯過了。這將選擇'

'而不是'

'。我怎樣才能讓這個XPath忽略任何空白文本節點。 –

+0

@OmarTariq:根據您的請求使用第二個XPath更新答案。 – kjhughes

+0

謝謝你,非常感謝。 –

相關問題