R使用rvest时如何写XPath提取属性值在指定向量内的节点文本
实现方案
你之前的写法失效的核心原因是:XPath表达式字符串无法直接识别R环境中的变量,你需要先把R侧的id向量拼接为XPath支持的多值匹配语法,再传入rvest调用。
完整可运行代码
library(rvest) # 1. 准备测试数据(你的原始XML和id向量) xml_content <- ' <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") # 2. 拼接合法的XPath表达式 # 生成id匹配条件段,格式为 @id = 'xx' or @id = 'zz' id_match_cond <- paste0("@id = '", id_vector, "'", collapse = " or ") # 完整XPath:匹配符合id条件的paragraph节点下的text节点的文本内容 target_xpath <- paste0("//paragraph[", id_match_cond, "]/text/text()") # 3. 用rvest提取目标文本 result <- read_html(xml_content) |> html_elements(xpath = target_xpath) |> html_text() # 输出结果为 c("hello", "guten Tag"),符合需求 print(result)
补充说明
如果你的id值本身包含单引号,可以调整拼接逻辑用双引号包裹属性值,避免语法冲突。
内容的提问来源于stack exchange,提问作者Etienne Brossard
相关产品推荐
相关产品推荐

