gpt4 book ai didi

r - 使用 R 和 xml2 库提取嵌套 XML 数据

转载 作者:行者123 更新时间:2023-12-02 20:12:45 24 4
gpt4 key购买 nike

我有以下信息作为嵌套 XML 文件,我试图将其转换为 data.frame 以进行分析和报告:

<node TEXT="Cost">
<node TEXT="Scale">
<node TEXT="1 - $0 to $100">
</node>
<node TEXT="2 - $100 to $500">
</node>
<node TEXT="3 - $500 to $1000">
</node>
<node TEXT="4 - $1000 to $5000">
</node>
<node TEXT="6 - $5000 +">
</node>
</node>
<node TEXT="Weight">
<node TEXT="1">
</node>
</node>
</node>

我能够读取 XML 文件并提取一小部分,如下所示:

file <- '<node TEXT="Cost">
<node TEXT="Scale">
<node TEXT="1 - $0 to $100">
</node>
<node TEXT="2 - $100 to $500">
</node>
<node TEXT="3 - $500 to $1000">
</node>
<node TEXT="4 - $1000 to $5000">
</node>
<node TEXT="6 - $5000 +">
</node>
</node>
<node TEXT="Weight">
<node TEXT="1">
</node>
</node>
</node>
'

data <- read_xml(file)

xml_find_all(data,"//node/node[@TEXT = 'Scale']/node/@TEXT")

但我真正需要做的是以 data.frame 的形式获取它,如下所示:

Node1  Node2    Node3
"Cost" "Scale" "1 - $0 to $100"
"Cost" "Scale" "2 - $100 to $500"
"Cost" "Scale" "3 - $500 to $1000"
"Cost" "Scale" "4 - $1000 to $5000"
"Cost" "Scale" "5 - $5000 +"
"Cost" "Weight" "1"

有人能指出我正确的方向吗?

最佳答案

您也可以只迭代节点列表,而不是使用 xslt。这里我们选择所有三层深度的节点,然后从所有父节点中提取 TEXT 属性(最后用 dplyr 将其绑定(bind)在一起)

library(dplyr)
xml_find_all(doc,"//node/node/node") %>% lapply(function(x) {
list(
NODE1=x %>% xml_parent %>% xml_parent %>% xml_attr("TEXT"),
NODE2=x %>% xml_parent %>% xml_attr("TEXT"),
NODE3=x %>% xml_attr("TEXT")
)
}) %>% bind_rows()

关于r - 使用 R 和 xml2 库提取嵌套 XML 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53198713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com