2016-12-15 42 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

谢谢你,非常感谢。 –

相关问题