替换XML节点

时间:2015-04-15 14:33:17

标签: xml r

我尝试使用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 :(

1 个答案:

答案 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>
相关问题