我试图将一个大的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
任何人都可以帮助我吗?
答案 0 :(得分:4)
libxml
对单个节点的大小有一个上限。您可以通过启用解析器标志XML_PARSE_HUGE
来关闭此限制。在R
包XML
中,您可以这样做:
library(XML)
xmlParse(myXML, options = HUGE)
您可能还想查看xmlEventParse
。 Martin Morgan就其使用here.