Xpath, R:选择属性值与数组/向量中的值匹配的节点



我有以下代码

<paragraph id = "xx">
<text>hello</text>
</paragraph>
<paragraph id = "yy">
<text>bonjour</text>
</paragraph>
<paragraph id = "zz">
<text>guten Tag</text>
</paragraph>

还有下面的向量

id_vector <- c("xx","zz")

我想获取段落节点中属性id为"xx"或者"zz",即得到一个字符向量,它将是

c("hello","guten Tag")

与return一起使用的合适XPath是什么?到目前为止,我已经尝试了以下XPath,但是没有效果

"//paragraph[@id = id_vector]/text"

提前感谢您的帮助!

我最初的建议忽略了这样一个事实,即id需要在xpath中用引号括起来,所以我继续把所有的东西放在一起。注意,我添加了一个<doc>标记作为假标记,因为xml示例需要父节点。将您的id与@id=片段粘贴在一起,折叠成xpath字符串,然后像往常一样提取文本。

library(xml2)
doc <- read_xml('
<doc>
<paragraph id = "xx">
<text>hello</text>
</paragraph>
<paragraph id = "yy">
<text>bonjour</text>
</paragraph>
<paragraph id = "zz">
<text>guten Tag</text>
</paragraph>
</doc>
')
id_vector <- c("xx","zz")
tags <- paste(stringr::str_glue("@id='{id_vector}'"), collapse = " or ")
xpath <- sprintf("//paragraph[%s]", tags)
xpath
#> [1] "//paragraph[@id='xx' or @id='zz']"
xml_text(xml_find_all(doc, xpath))
#> [1] "hello"     "guten Tag"

最新更新