如何使用 R 的 xml2 包获取 XML 文件中所有属性的名称

问题描述

我正在尝试使用 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 具有某种可以查询的架构)。