You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言中使用XPath获取无子节点的节点父节点名称失败如何解决

核心原因

R语言XML包的getNodeSet()返回的是XML节点对象列表,直接调用names(a)获取的是R列表本身的属性名,而非XML节点的自身名称,同时你的XPath会因为单个父节点存在多个叶子子节点被重复匹配,需要去重才能得到预期结果。

调整方案

方案1:先提取节点再批量获取名称

library(XML)
xml_doc <- ("<ca>
  <ai>67400000</ai>
  <ssci>FN</ssci>
  <aa>
    <ta>1280</ta>
    <tc>EUR</tc>
  </aa>
</ca>")

xml_parsed <- xmlParse(xml_doc)
# 获取所有叶子节点的父节点集合
parent_nodes <- getNodeSet(xml_parsed, "//*[not(*)]/parent::*")
# 遍历节点集合提取名称后去重,倒序排序得到aa在前的结果
parent_names <- sort(unique(sapply(parent_nodes, xmlName)), decreasing = TRUE)
# 转为逗号分隔的字符串输出
cat(paste(parent_names, collapse = ", "))

运行后输出结果为:aa, ca,符合预期。

方案2:直接通过XPath返回名称

使用xpathSApply()直接接收XPath返回的名称值,无需额外解析节点:

parent_names <- sort(unique(xpathSApply(xml_parsed, "//*[not(*)]/parent::*/name()")), decreasing = TRUE)

内容的提问来源于stack exchange,提问作者MLEN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:15:01