没有文本节点后代的文档中所有元素的Xpath?

时间:2016-12-15 21:52:28

标签: php html xml 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中有一个文本节点。

我希望我没有提出复杂的问题。

1 个答案:

答案 0 :(得分:7)

这个XPath,

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

将选择文档中没有文本节点后代的所有元素。

这个XPath,

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

执行相同操作,但允许只包含空格的文本节点。