繁体   English   中英

将XML解析为R数据帧

[英]Parsing XML into an R data frame

我试图将一个大的xml文件解析为R - data.frame对象。 xml具有以下架构:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?eclipse version="3.0"?>
  <ROOT>
  <row>
    <field name="dtcreated"></field>
    <field name="headline"></field>
    <subheadline/>
    <field name="body"></field>
  </row>
  <row>
    <field name="dtcreated"></field>
    <field name="headline"></field>
    <subheadline/>
    <field name="body"></field>
  </row>
</ROOT>

plyr便利功能没有帮助,因为无法验证xml。 所以我想出了以下代码,使用xpath查询:

adHocXml<-xmlTreeParse(adHocXmlPath,getDTD = FALSE)
adHocRoot<-xmlRoot(adHocXml)
creationDateColumn<-sapply(getNodeSet(adHocRoot,"//row//field[@name='dtcreated']"), xmlValue)
headlineColumn<-sapply(getNodeSet(adHocRoot,"//row//field[@name='headline']"), xmlValue)
bodyColumn<-sapply(getNodeSet(adHocRoot,"//row//field[@name='body']"), xmlValue)
adHocData<-data.frame(creationDate=creationDateColumn,headline=headlineColumn,body=bodyColumn)

代码完全符合我期望它为短文件做的事情。 但是,使用大文件和几千行标签,大约10分钟后会出现以下错误:

Error: 1: internal error: Huge input lookup
2: Extra content at the end of the document 

谁能帮我?

libxml对单个节点的大小有一个上限。 您可以通过启用解析器标志XML_PARSE_HUGE来关闭此限制。 RXML您可以这样做:

library(XML)
xmlParse(myXML, options = HUGE)

您可能还想查看xmlEventParse Martin Morgan在这里提供了一个很好的例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM