我尝试使用XML包编辑KML文件,将节点/子节点替换为另一节点。
基本上,我尝试过一个简单的替换(doc[[1]][[1]][[1]][[2]][[2]][[2]]
是一个名为“描述”的节点,我试图用一个名为'的节点替换。 ExtendedData&#39):
doc[[1]][[1]][[1]][[2]][[2]][[2]] <- do.call(xmlNode, c('ExtendedData', mapply(function(nome, valor) xmlNode('Data', attrs = c(name = nome), xmlNode('value', valor)), paste(tabela[, 1]), paste(tabela[, 2]), SIMPLIFY = FALSE)))
但没有工作(没有任何错误/警告信息.doc [[1]] [[1]] [[1]] [[2]] [[2]] [[2]]是不变)。下一步是尝试使用removeChildren()
和addChildren()
:
newNode <- removeChildren(addChildren(doc[[1]][[1]][[1]][[2]][[2]], do.call(xmlNode, c('ExtendedData', mapply(function(nome, valor) xmlNode('Data', attrs = c(name = nome), xmlNode('value', valor)), paste(tabela[, 1]), paste(tabela[, 2]), SIMPLIFY = FALSE)))), 'description')
此代码构建了我需要的节点。但doc[[1]][[1]][[1]][[2]][[2]] <- newNode
dosn也有效。
那么,任何关于我能做什么的想法?我尝试用同样的问题做一个简单的例子,但是我失败了(<-
运算符在简单的例子中效果很好),我无法共享原始的KML :(
答案 0 :(得分:0)
您可以使用replaceNodes
功能:
library(XML)
myXML <- "<root><a>'hello world'</a></root>"
doc <- xmlParse(myXML)
replaceNodes(doc["//a/text()"][[1]], "test")
> doc
<?xml version="1.0"?>
<root>
<a>test</a>
</root>