我对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
中有一个文本节点。
我希望我没有提出复杂的问题。
答案 0 :(得分:7)
这个XPath,
//*[not(.//text())]
将选择文档中没有文本节点后代的所有元素。
这个XPath,
//*[not(.//text()[normalize-space()])]
执行相同操作,但允许只包含空格的文本节点。