加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 23:50:39 所属栏目:百科 来源:网络整理
导读:我想从大型xml文件(20 GB)中读取数据并对其进行操作.我厌倦了使用“xmlParse()”,但它在加载前给了我内存问题.有没有有效的方法来做到这一点? 我的数据转储看起来像这样, tags row Id="106929" TagName="moto-360" Count="1"/ row Id="106930" TagName="n1q
我想从大型xml文件(20 GB)中读取数据并对其进行操作.我厌倦了使用“xmlParse()”,但它在加载前给了我内存问题.有没有有效的方法来做到这一点?

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

<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>
在XML包中,xmlEventParse函数实现SAX(读取XML并调用函数处理程序).如果您的XML足够简单(在一个根元素内重复元素),您可以使用branches参数为每个元素定义函数.

例:

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解析:

xmlEventParse(
  file = "http://www.nlm.nih.gov/databases/dtd/medsamp2015.xml",handlers = NULL,branches = list(MedlineCitation = MedlineCitation)
)

关闭解决方案:

就像Martin Morgan,Storing-specific-xml-node-values-with-rs-xmleventparse:

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",branches = myfunctions
)

#to see what is inside
myfunctions$getStore()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读