我试图使用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,并在保存它之前添加了一些子节点。我想这不是最优雅的方式,但现在它工作了。
希望有帮助,
亚历克斯