【问题标题】:Xpath for all elements in the document without text node descendants?文档中没有文本节点后代的所有元素的Xpath?
【发布时间】:2017-05-01 15:11:47
【问题描述】:

我对 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 中有一个文本节点。

我希望我没有把问题弄得太复杂。

【问题讨论】:

    标签: php html xml xpath


    【解决方案1】:

    这个 XPath,

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

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


    这个 XPath,

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

    做同样的事情,但允许文本节点只包含空格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-25
      • 1970-01-01
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多