使用" R"从XML文件中使用xpathsapply提取元素总和。

时间:2014-11-28 10:02:56

标签: xml r xpath

假设我们有以下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>
&#13;
&#13;
&#13;

现在我想通过使用&#34; R&#34;来获取它的表格(数据框或列表)。 (使用&#34; xpathSApply&#34;),ID为第一列,以及相关的&#34; D&#34; s的总和。因此,在此示例中,结果应如下所示:

&#13;
&#13;
ID  |  sum(D)
----+--------
1   | 30
2   | 80
&#13;
&#13;
&#13;

xml文件只是一个例子。实际上它包含更多元素,每个A元素的D元素数量是可变的。

非常感谢!! :)

1 个答案:

答案 0 :(得分:1)

你可以尝试

library(XML)
lst <- xmlToList('file.xml')
do.call(rbind,lapply(lst, function(x) {x1 <- unlist(x)
        data.frame(ID=x1[1], Sum_D=sum(as.numeric(x1[-1])))}))
#   ID Sum_D
#A   1   30
#A1  2   80

或者可能是D元素的长度是相同的

xl <- xmlParse('file.xml')
ID <- xpathSApply(xl, '//ID', xmlValue)
Sum_D <- colSums(matrix(as.numeric(xpathSApply(xl, '//D', 
                xmlValue)), ncol=length(ID)))

 data.frame(ID, Sum_D)
#  ID Sum_D
#1  1   30
#2  2   80