R中的XML解析和数据帧转换

时间:2015-07-19 06:07:07

标签: xml r xml-parsing

我有一个XML文件,我在R中解析并且必须读取它并将其转换为数据帧,随后可以按行ID排列。这是XML文件

<tags>
<row Id="1" TagName="bayesian" Count="1342" ExcerptPostId="20258" WikiPostId="20257"/>
<row Id="2" TagName="prior" Count="168" ExcerptPostId="62158" WikiPostId="62157"/>
<row Id="3" TagName="elicitation" Count="6"/>
<row Id="4" TagName="normality" Count="191" ExcerptPostId="67815" WikiPostId="67814"/>
<row Id="5" TagName="open-source" Count="13"/>
</tags>

我尝试使用XMLparse

Tags_data <- xmlParse("../Tags.xml",useInternalNodes = True)
xml_Data <- xmlToList(Tags_data)
ldply(xml_Data,data.frame)

不知怎的,它给了我错误,行没有转换成data.frame。

2 个答案:

答案 0 :(得分:1)

TRUE中的逻辑值R应始终全部为大写。此外,为了输出每个观察一行的data.frame,您应该在rbind中使用data.frame而不是ldply

library(XML)
library(plyr)
xml <- '<tags> <row Id="1" TagName="bayesian" Count="1342" ExcerptPostId="20258" WikiPostId="20257"/>
  <row Id="2" TagName="prior" Count="168" ExcerptPostId="62158" WikiPostId="62157"/>
  <row Id="3" TagName="elicitation" Count="6"/>
  <row Id="4" TagName="normality" Count="191" ExcerptPostId="67815" WikiPostId="67814"/>
  <row Id="5" TagName="open-source" Count="13"/>
  </tags>'

Tags_data <- xmlParse(xml,useInternalNodes = TRUE)
xml_Data <- xmlToList(Tags_data)

ldply(xml_Data,rbind)

  .id Id     TagName Count ExcerptPostId WikiPostId
1 row  1    bayesian  1342         20258      20257
2 row  2       prior   168         62158      62157
3 row  3 elicitation     6          <NA>       <NA>
4 row  4   normality   191         67815      67814
5 row  5 open-source    13          <NA>       <NA>

答案 1 :(得分:0)

您还可以在行节点上使用xmlAttrsToDataFrame

doc <- xmlParse(xml)
XML:::xmlAttrsToDataFrame(doc["//row"])
  Id     TagName Count ExcerptPostId WikiPostId
1  1    bayesian  1342         20258      20257
2  2       prior   168         62158      62157
3  3 elicitation     6          <NA>       <NA>
4  4   normality   191         67815      67814
5  5 open-source    13          <NA>       <NA>