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

How to get the names of all attributes in an XML file using R's xml2 package

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