如何使用XPath获取节点值/innerHTML?

41

我有一个XPath选择器,用于选择我想要的类://div[@class='myclass']。但它会返回整个

(包括<div class='myclass'>),但我只想返回标签内的内容而不包括标签本身。有什么方法可以做到这一点吗?

4个回答

48
node() = innerXml

text() = innerText

两者都是数组,所以text()[1]是第一个子文本节点...


XML中有多个文本节点会是什么样子?text()会返回所选节点下所有子节点的innerText的连接吗? - CodeManX
2
@CoDEmanX: <div>text1<span>text2</span>text3</div> 就像我说的一样,它是一个数组,所以 div/node()[0] == div/text()[0] == text1 节点,而 div/node()[1] == span 节点,div/node()[2] == div/text()[1] == text3 节点 - 你需要自己将它们连接起来(手动或使用接受数组的辅助函数)。 - Nikola Bogdanović

36
使用xpath时,返回的是路径中最后一个非条件元素。这是什么意思呢?条件指的是位于[]之间的内容(你已经知道了),你的路径看起来像是pathElement[具有'value'为'my class'的'class'属性],其中pathElement直接在[之前。
方括号[]之外的所有内容都是路径,所以在//a/b/c[@blah='bleh']/d中,abcd都是路径元素,blah是属性名,bleh是字面值。如果此路径匹配,则返回最后一个非条件元素d
你特定的路径返回一个或一系列div,是你xpath路径中的最后一个元素。因此,返回值包括顶级节点(在你的情况下是div)及其下面的所有子节点。节点可以是元素、文本(或注释、处理指令等)。
在节点下面可能有多个文本节点,这就是pOcHa谈到的数组。x/text()返回x的所有直接子文本,x/node()返回所有子节点,包括文本。

10

一则关于 IT 技术的常见问题的新回答:

针对这份 XML 文档,

<div class="myclass">content</div>

你可以使用XPath以两种方式之一选择仅content
  1. Text Node Selection

    This XPath,

    //div[@class='myclass']/text()
    

    will select the text node children of the targeted div element, content, as requested.

  2. String Value of an Element

    This XPath,

    string(//div[@class='myclass'])
    

    will return string-value of the targeted div element, content, again as requested.

    Further information: Here's a note explaining the string-values of elements:

    The string-value of an element node is the concatenation of the string-values of all text node descendants of the element node in document order.


2
King...你帮我解决了字符串(xpath)的问题。 - chainstair

4
你可以尝试一下。
//div[@class='myclass']/child::*

child::* 选择上下文节点的所有元素子节点 详细信息


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接