在R中解析XML数据

时间:2016-01-29 14:52:32

标签: xml r parsing

我想用以下结构解析XML文件:

cleanDate

我只需要来自一个节点的数据,例如'ObjectList ObjectType =“Type3”'。它可能不是第3位的节点。我必须根据它的名字选择它。最后,此节点(a,b,c)的子节点应存储在数据框中。

  • 如何检索此节点?
  • 如何将子数据提取到数据框中?

有什么想法吗?提前谢谢!

2 个答案:

答案 0 :(得分:2)

使用XML包解析XML:

library(XML)
### load the XML
d <- xmlTreeParse("test.xml")
top <- xmlRoot(d)

使用XPath查询所需内容,查找具有ObjectList属性的所有ObjectType='Type3'个节点:

n <- getNodeSet(top, "//ObjectList[@ObjectType='Type3']")

[[1]]
<ObjectList ObjectType="Type3">
 <o>
  <a>value31</a>
  <b>value32</b>
  <c>value33</c>
 </o>
</ObjectList>

将对象内的结构转换为矩阵

m <- lapply(n, function(o)
       t(sapply(xmlChildren(o),
         function(x) xmlSApply(x, xmlValue))))

> m
[[1]]
  a         b         c        
o "value31" "value32" "value33"

您可以将所有这些组合(即,如果您有多个匹配的ObjectList个对象)组合到数据框中:

d <- as.data.frame(do.call("rbind", m))

> d
        a       b       c
o value31 value32 value33

答案 1 :(得分:0)

尝试xmlToDataFrame

doc <- xmlParse("test.xml")
xmlToDataFrame(doc["//ObjectList[@ObjectType='Type3']/o"])
        a       b       c
1 value31 value32 value33