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

Tom*_*ski 32 xml xpath parsing html-parsing

我有一个XPath来选择我想要的类://div[@class='myclass'].但它返回给我整个div(<div class='myclass'>也有,但我想只返回这个标签的内容而没有标签本身.我怎么能这样做?

Nik*_*vić 41

node() = innerXml

text() = innerText
Run Code Online (Sandbox Code Playgroud)

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

  • @CoDEmanX:`&lt;div&gt;text1&lt;span&gt;text2&lt;/span&gt;text3&lt;/div&gt;`正如我所说,它是一个**数组**,所以`div/node()[0] == div/text ()[0] == text1` 节点,且 `div/node()[1] == span` 节点,且 `div/node()[2] == div/text()[1] == text3 ` 节点 - 您必须自己连接它们(手动或使用接受数组的辅助函数)。 (2认同)

jos*_*jos 34

使用xpath,您将返回的内容是路径中不是条件的最后一件事.那意味着什么?好吧,条件是两者之间的东西[](但你已经知道了),你的内容就像pathElement一样[ 具有'class'属性,值为'my class' ].pathElement直接来自[.

[]那时所有的东西都是路径,所以在//a/b/c[@blah='bleh']/d a,b,cd都是路径元素,blah是一个属性,并且是一个文字值.如果此路径匹配,它将返回一个d,最后一个非条件的东西.

您的特定路径返回一系列(div),是xpath路径中的最后一个.因此,此返回值包括顶级节点,在您的情况下为div,在其下面(它们)包括其所有(他们的)子节点.节点可以是元素或文本(或注释,处理指令,......).

在节点下面可以有多个文本节点,因此数组pOcHa谈论.x/text()返回作为x的直接x/node()子节点的所有文本,返回所有子节点,包括文本.

希望这可以帮助.


kjh*_*hes 6

针对旧的常见问题的新答案:

对于此XML

<div class="myclass">content</div>
Run Code Online (Sandbox Code Playgroud)

您可以使用XPath通过content以下两种方式之一进行选择:

  1. 文本节点选择

    这个XPath

    //div[@class='myclass']/text()
    
    Run Code Online (Sandbox Code Playgroud)

    将根据要求选择目标div元素 的文本节点子级content

  2. 元素的字符串值

    这个XPath

    string(//div[@class='myclass'])
    
    Run Code Online (Sandbox Code Playgroud)

    将再次根据要求返回目标元素的 字符串值divcontent

    进一步的信息:这是一条注释,解释元素的字符串值

    所述字串值元素节点的是串接 字符串值的所有文本节点号第后代在文档顺序元素节点的。

  • King ...你帮我解决了 string(xpath) (2认同)