gpt4 book ai didi

xml - 使用“R”中的XML节点

转载 作者:行者123 更新时间:2023-12-03 17:36:43 26 4
gpt4 key购买 nike

给定以下XML文件:

<XML>
<A>
<B>
<ID>1</ID>
</B>
<C>
<D>10</D>
<D>20</D>
</C>
</A>
<A>
<B>
<ID>2</ID>
</B>
<C>
<D>30</D>
<D>50</D>
</C>
</A>
</XML>


使用以下R代码,我可以读取XML文件:

library(XML)
xmlobj <- xmlTreeParse("my_file.xml", useInternalNodes = TRUE)


首先,我想获取XML节点“ A”的列表。我可以做到这一点

node_a <- xpathSApply(doc = xmlobj, path = "//A", xmlChildren)


结果(node_a)如下所示:

  [,1] [,2]
B ? ?
C ? ?


在第二步中,我想在步骤1中提取的列表中的每个XML节点上调用一个函数,并返回XML节点“ D”的列表。我尝试从第一步中获取列表中第一个“ A”元素的“ C”子元素:

xmlChildren(asXMLNode(node_a["C",1]))


但是结果是:

named list()
attr(,"class")
[1] "XMLNodeList"


最后,我想为每个A分别获得D的值(一个ID为1的A的D值的列表和ID为2的A的D值的一个列表)。

换句话说,我想获得一个列表,其中包含ID为1的元素A的所有D个元素的值,以及另一个列表,包含ID 2的元素A的所有D个元素的值。

最佳答案

在问题xmlText的开头调用xml文本,

library(XML)
xml <- xmlParse(xmlText,asText=T)
lapply(xml["//A//C"],function(node)sapply(xmlElementsByTagName(node,"D"),xmlValue))
# [[1]]
# D D
# "10" "20"
#
# [[2]]
# D D
# "30" "50"


如果您希望使用整数而不是字符,并且不希望使用名称,

get.D <- function(node) unname(sapply(xmlElementsByTagName(node,"D"),function(n)as.integer(xmlValue(n))))
lapply(xml["//A//C"],get.D)
# [[1]]
# [1] 10 20
#
# [[2]]
# [1] 30 50

关于xml - 使用“R”中的XML节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27188900/

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