用于选择所有文本节点的XPath

时间:2017-03-10 15:49:44

标签: javascript html xml xpath

我正在编写一个可以用HTML代码替换文本的JavaScript函数,但要做到这一点,我需要能够以文本节点的形式访问文本。以下XPath选择文档中的所有div标记:

//div

以下XPath选择属性class分配了值myclass的所有元素:

//*[@class="myclass"]

以下选择ID为comments的元素下任何级别的所有文字(不是文字节点):

//*[@id="comments"]//text()

什么是XPath可用于选择任何元素下的所有文本节点?所以,假设我想要替换字符串Hebert的所有非注释事件,并且我需要所有文本节点,以便我可以扫描它们以查找该字符串。它会在查询中使用text()吗?

1 个答案:

答案 0 :(得分:6)

两个选项:

  • 选择字符串值包含子字符串的所有文本节点 “赫伯特”:

    //text()[contains(.,'Herbert')]
    
  • 选择字符串值 “Herbert”的所有文本节点:

    //text()[.='Herbert']
    

请注意您的评论,

  

以下选择所有文本(不是文本节点)

关于XPath,//text()是不正确的。节点测试text()选择文本节点。在字符串上下文中,它将返回文本节点的string-value,但仅text()肯定会选择实际的文本节点。

另见Testing text() nodes vs string values in XPath