3

我正在尝试使用 R 读取 XML 文件,选择几个节点并将其写回另一个 XML 我现在正在学习在 R 中处理 XML 文件,参考此链接中的示例“ http://www.r-bloggers.xml”。 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")") 它工作正常。但只有当我尝试编写子集时它才会失败。

4

1 回答 1

2

尝试类似的东西

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

希望能帮助到你,

亚历克斯

于 2014-05-06T23:27:02.977 回答