问题描述
我正在尝试使用 R 的 xml2 包获取 XML 文件中所有属性的名称。
我可以使用 xml_attrs()
函数获取单个级别的属性名称,但无法弄清楚如何获取所有级别的属性。请参阅下面的示例。
非常感谢任何帮助。
library(xml2)
library(dplyr)
# Make up some data
dat <- read_xml(
"<LEVEL1 attr_lvl1='a'>
<LEVEL2 attr_lvl2='b'>
</LEVEL2>
<LEVEL2 attr_lvl2='c'>
</LEVEL2>
</LEVEL1>"
)
# I kNow how to get the attributes for each level...
names(xml_attrs(dat)) #"attr_lvl1"
names(xml_attrs(xml_child(dat,'LEVEL2'))) #"attr_lvl2"
# Want code which returns the names of attributes across
# *all* levels,i.e. should return "attr_lvl1","attr_lvl2"
解决方法
您可以遍历所有节点,获取属性名称,然后创建唯一值的向量。你可以这样做
dat %>%
xml_find_all("//*") %>%
purrr::map(~names(xml_attrs(.))) %>%
unlist() %>%
unique()
# [1] "attr_lvl1" "attr_lvl2"
如果不迭代所有节点,真的无法知道所有属性是什么(除非您的 XML 具有某种可以查询的架构)。