使用R读取XML文件,选择几个节点并将其写回另一个XML



我试图使用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给出了一个错误消息" (function (classes, fdef, mtable)中的错误:无法为签名' "XMLNodeList"找到函数' saveXML '的继承方法。
注意:当我尝试编写完整的XML(使用"saveXML(xmlroot,file="out.xml")")时,它工作得很好。但只有当我试图编写子集时,它才会失败。

试试

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,并在保存它之前添加了一些子节点。我想这不是最优雅的方式,但现在它工作了。

希望有帮助,

亚历克斯

相关内容

  • 没有找到相关文章

最新更新