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

时间:2012-06-05 13:16:42

标签: xml parsing xpath html-parsing

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

4 个答案:

答案 0 :(得分:41)

node() = innerXml

text() = innerText

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

答案 1 :(得分:33)

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

之前

[]以外的所有内容都是路径,因此在//a/b/c[@blah='bleh']/d a b c < / em>和 d 都是路径元素, blah 是属性, bleh 是文字值。如果此路径匹配,它将返回 d ,这是最后一个非条件的东西。

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

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

希望这有帮助。

答案 2 :(得分:5)

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

对于此XML

lapply(1:3, purrr::as_mapper(`[`), .x = letters)
lapply(1:3, rlang::as_closure(`[`), .x = letters)
# [[1]]
# [1] "a"
# 
# [[2]]
# [1] "b"
# 
# [[3]]
# [1] "c"

您可以使用XPath以两种方式之一选择<div class="myclass">content</div>

  1. 文字节点选择

    这个XPath,

    content

    将选择目标//div[@class='myclass']/text() 元素的文本节点子节点, div,视要求提供。

  2. 元素的字符串值

    这个XPath,

    content

    将返回目标string(//div[@class='myclass']) 元素的string-valuediv,再次按要求提供。

    更多信息:这是note解释元素的 字符串值

      

    元素节点的string-value是该节点的串联   元素的所有文本节点string-valuedescendants个   文档顺序中的节点。

答案 3 :(得分:1)

你可以尝试

  

// DIV [@类= 'MyClass的'] /子:: *

child :: *选择上下文节点see details

的所有元素子元素