【发布时间】:2014-11-28 12:40:20
【问题描述】:
给定以下 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 元素的值。
【问题讨论】: