首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中读取大的(~20 GB) xml文件?

如何在R中读取大的(~20 GB) xml文件?
EN

Stack Overflow用户
提问于 2015-02-23 06:15:37
回答 1查看 6.1K关注 0票数 7

我想从大型xml文件(20 GB)中读取数据并对它们进行操作。我厌倦了使用"xmlParse()“,但在加载之前,它给了我内存问题。有什么有效的方法吗?

我的数据转储看起来像这样,

代码语言:javascript
复制
<tags>                                                                                                    
    <row Id="106929" TagName="moto-360" Count="1"/>
    <row Id="106930" TagName="n1ql" Count="1"/>
    <row Id="106931" TagName="fable" Count="1" ExcerptPostId="25824355" WikiPostId="25824354"/>
    <row Id="106932" TagName="deeplearning4j" Count="1"/>
    <row Id="106933" TagName="pystache" Count="1"/>
    <row Id="106934" TagName="jitter" Count="1"/>
    <row Id="106935" TagName="klein-mvc" Count="1"/>
</tags>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-23 08:35:39

在XML中,xmlEventParse函数实现SAX (读取XML并调用函数处理程序)。如果XML足够简单(在一个根元素中重复元素),则可以使用branches参数为每个元素定义函数。

示例:

代码语言:javascript
复制
MedlineCitation = function(x, ...) {
  #This is a "branch" function
  #x is a XML node - everything inside element <MedlineCitation>
  # find element <ArticleTitle> inside and print it:
  ns <- getNodeSet(x,path = "//ArticleTitle")
  value <- xmlValue(ns[[1]])
  print(value)
}

调用XML解析:

代码语言:javascript
复制
xmlEventParse(
  file = "http://www.nlm.nih.gov/databases/dtd/medsamp2015.xml", 
  handlers = NULL, 
  branches = list(MedlineCitation = MedlineCitation)
)

关闭解决方案:

就像马丁·摩根,Storing-specific-xml-node-values-with-rs-xmleventparse

代码语言:javascript
复制
branchFunction <- function() {
  store <- new.env() 
  func <- function(x, ...) {
    ns <- getNodeSet(x, path = "//ArticleTitle")
    value <- xmlValue(ns[[1]])
    print(value)
    # if storing something ... 
    # store[[some_key]] <- some_value
  }
  getStore <- function() { as.list(store) }
  list(MedlineCitation = func, getStore=getStore)
}

myfunctions <- branchFunction()

xmlEventParse(
  file = "medsamp2015.xml", 
  handlers = NULL, 
  branches = myfunctions
)

#to see what is inside
myfunctions$getStore()
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28667856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档