我想用以下结构解析XML文件:
cleanDate
我只需要来自一个节点的数据,例如'ObjectList ObjectType =“Type3”'。它可能不是第3位的节点。我必须根据它的名字选择它。最后,此节点(a,b,c)的子节点应存储在数据框中。
有什么想法吗?提前谢谢!
答案 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