你知道用r把xml文件转换成数据帧格式的最好方法是什么吗?它可以是任何格式的table, data.table…
xml文件在这个链接下面
https://www.ictax.admin.ch/extern/api/download/2619327/ea428026a27f772d57efbbcdc56bff62/kursliste_2022.zip我尝试了下面的代码,但它不起作用:
result <- xmlParse(file = "kursliste_2022.xml")
xml_result <- xmlToList(result)
xml_structure(xml_result)
试试这个:
library(tibble)
library(XML)
library(xml2)
ur_xml <- "your_xml_path"
data <- read_xml(ur_xml)
doc <- xmlParse(data)
df <- xmlToDataFrame(nodes = getNodeSet(doc, "//your_node_of_interest"))
tb <- as_tibble(df)
数据帧和XML文档没有唯一的1对1映射。数据帧是类似矩阵的结构,因此只有两个维度,而XML文档更类似于一个n维数组。
事实证明,你问的问题有多种方式,因此你的问题是基于意见的,这在这里通常是不允许的。
但是,为了让您了解如何减少维度,您可以在数据框架的一列上重复相同的值例如,对于前三个节点:
library('xml2')
result <- read_xml("kursliste_2022.xml")
y <- lapply(1:3, (i) xml_child(result, i))
Reduce(rbind, lapply(y, (x) cbind(data.frame(t(xml_attrs(x))), t(sapply(xml_children(x), xml_attrs)))))
# id canton lang name
# 1 2587 AG de Aargau
# 2 2587 AG en Aargau
# 3 2587 AG fr Argovie
# 4 2587 AG it Argovia
# 5 2588 AI de Appenzell I. Rh.
# 6 2588 AI en Appenzell Inner-Rhodes
# 7 2588 AI fr Appenzell Rh.-Int.
# 8 2588 AI it Appenzello Interno
# 9 2589 AR de Appenzell A. Rh.
# 10 2589 AR en Appenzell Outer-Rhodes
# 11 2589 AR fr Appenzell Rh.-Ext.
# 12 2589 AR it Appenzello Esterno
现在,请编辑你的问题,使你的问题更清楚。