xml - 在 R 中解析 XML 文件(>1 MB)

标签 xml r xml-parsing

目前,我有大约 20,000 个 XML 文件,大小从几 KB 到几 MB 不等。虽然它可能并不理想,但我使用 XML 包中的“xmlTreeParse”函数来循环遍历每个文件并提取我需要的文本并将文档保存为 csv 文件。

下面的代码适用于大小 <1 MB 的文件:

files <- list.files()
for (i in files) {
    doc <- xmlTreeParse(i, useInternalNodes = TRUE)
    root <- xmlRoot(doc)

    name <- xmlValue(root[[8]][[1]][[1]]) # Name
    data <- xmlValue(root[[8]][[1]]) # Full text

    x <- data.frame(c(name))
    x$data <- data

    write.csv(x, paste(i, ".csv"), row.names=FALSE, na="")
}

问题是任何大于 1 MB 的文件都会出现以下错误:

Excessive depth in document: 256 use XML_PARSE_HUGE option
Extra content at the end of the document
Error: 1: Excessive depth in document: 256 use XML_PARSE_HUGE option
2: Extra content at the end of the document

请原谅我的无知,但是我尝试在 XML 包中搜索“XML_PARSE_HUGE”函数,但似乎找不到它。有人有使用此功能的经验吗?如果是这样,我将非常感谢任何有关如何让此代码处理稍大的 XML 文件的建议。

谢谢!

最佳答案

要选择“XML_PARSE_HUGE”,您需要在选项中进行规定。 XML:::parserOptions 列出选项选择:

> XML:::parserOptions
   RECOVER      NOENT    DTDLOAD    DTDATTR   DTDVALID    NOERROR  NOWARNING 
         1          2          4          8         16         32         64 
  PEDANTIC   NOBLANKS       SAX1   XINCLUDE      NONET     NODICT    NSCLEAN 
       128        256        512       1024       2048       4096       8192 
   NOCDATA NOXINCNODE    COMPACT      OLD10  NOBASEFIX       HUGE     OLDSAX 
     16384      32768      65536     131072     262144     524288    1048576 

例如

> HUGE
[1] 524288

使用这些选项中的任何一个来声明整数向量就足够了。对于你的情况

xmlTreeParse(i, useInternalNodes = TRUE, options = HUGE)

关于xml - 在 R 中解析 XML 文件(>1 MB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17154308/

相关文章:

javascript - 了解 AJAX 的功能及其局限性

r - 带有 dplyr 的快速频率和百分比表

r - 列出 6 位数字中的所有 3 位数字组合

java - Xmlpullparser 解析嵌套项目

xml - Golang : Parse both XML element value and attributes for groups

xml - 将大型 XML 文件拆分为 Hadoop 的可管理部分

r - R Plotly 中的 3D 气泡图

javascript - 将 XML 文件中的 US Word 替换为 UK Word 的最佳方法是什么

python - 解析 XML 文件以根据子元素检索父元素

java - 命名空间未绑定(bind)问题