dsfsfsfsfs55656
dsfsfsfsfs55656
2016-12-15 21:52
浏览 146

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

I'm not fully familiar with XPath. I did an extensive search and only found a solution for immediate children.

Requirement is to select an element who does not have any child, grand child, grand grand child, or any child that is present in its family tree which has a text node in it.

A simple example is:-

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

If I run the following XPath query:-

//p[not(text())]

It gives following output:-

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

(I'm using freeformatter xpath tool: http://www.freeformatter.com/xpath-tester.html)

The first Element is a valid selection.

The second Element is a valid selection.

The third Element is NOT a valid selection because p's child span has a text node in it.

I hope I didn't made the question over complicated.

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • douyun6781
    douyun6781 2016-12-15 21:57
    已采纳

    This XPath,

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

    will select all elements in the document without text node descendants.


    This XPath,

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

    does the same but allows text nodes that consist of just whitespace.

    点赞 评论

相关推荐