【问题标题】:use R to read a XML file, select few nodes and write it back to another XML使用 R 读取 XML 文件,选择几个节点并将其写回另一个 XML
【发布时间】:2014-05-06 22:57:25
【问题描述】:

我正在尝试使用 R 读取 XML 文件,选择几个节点并将其写回另一个 XML 我现在正在学习在 R 中处理 XML 文件,参考了此链接“http://www.r-bloggers.com/r-and-the-web-for-beginners-part-ii-xml-in-r/”中的示例,它解释了如何读取 XML 和打印选定的节点。我想扩展提到的示例 - 我想选择一系列“植物”节点(例如 1 到 5)并将其存储在另一个 XML 中

输入的 XML 文件如下所示

<?xml version="1.0"?>
<CATALOG>
 <PLANT>
  <COMMON>Bloodroot</COMMON>
  <BOTANICAL>Sanguinaria canadensis</BOTANICAL>
  <ZONE>4</ZONE>
  <LIGHT>Mostly Shady</LIGHT>
  <PRICE>$2.44</PRICE>
  <AVAILABILITY>031599</AVAILABILITY>
 </PLANT>
 <PLANT>
  <COMMON>Columbine</COMMON>
  <BOTANICAL>Aquilegia canadensis</BOTANICAL>
  <ZONE>3</ZONE>
  <LIGHT>Mostly Shady</LIGHT>
  <PRICE>$9.37</PRICE>
  <AVAILABILITY>030699</AVAILABILITY>
 </PLANT>
 .
 .
 <CATALOG>

我有以下代码

library(XML)
xml.url <- "http://www.w3schools.com/xml/plant_catalog.xml"
xmlfile <- xmlTreeParse(xml.url)
xmltop <- xmlRoot(xmlfile)
saveXML(xmltop[1:5],file="out.xml")

但是 R 给出错误消息“(函数(类,fdef,mtable)中的错误:无法为签名“XMLNodeList”的函数“saveXML”找到继承的方法。
注意:当我尝试编写完整的 XML(使用“saveXML(xmlroot,file="out.xml")”)时,它工作正常。但只有当我尝试编写子集时它才会失败。

【问题讨论】:

    标签: xml r writexml


    【解决方案1】:

    试试类似的东西

    top <- xmlNode(xmlName(xmltop))
    for(i in 1:5) top <- addChildren(top, xmltop[[i]])
    saveXML(top, file="out.xml")
    file.show("out.xml")
    

    所以我创建了一个名为 top 的 xmlNode 并在保存之前添加了一些子节点。我想这不是最优雅的方式,但现在可以了。

    希望对你有帮助,

    亚历克斯

    【讨论】:

    • 谢谢亚历克斯。这次它确实写了,但不是 XML。它显示为 "
    • saveXML 中,您使用参数file 来指定输出文件。如果此参数是 NULL,那么您将在 R 控制台中获得输出。你确定你在那里使用了文件名吗?
    • @alko:它确实将输出写入文件 out.xml。但问题是内容不显示为 XML,而是如上所述。
    • 当然你是对的,抱歉我没有仔细检查输出文件。我编辑了我的答案。
    • 谢谢亚历克斯。它的工作原理:-)你能指导我到一些手册/网站,在那里我可以了解更多关于 R 中 XML 处理的信息。我想对大型 XML 文件(> 2GB)进行类似的处理,我从omegahat.org/RSXML/shortIntro.pdf 读到我应该使用 xmlEventParse()。但是我觉得很难看懂手册——这个包里有很多功能,只是不知道从哪里开始。任何指导将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 2012-08-16
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    相关资源
    最近更新 更多