2015-04-15 3 views
0

Я пытаюсь редактировать файл KML с использованием пакета XML, заменяя узел/дочерний на другой.Замена узла XML

В принципе, я попытался простой замены (doc[[1]][[1]][[1]][[2]][[2]][[2]] является узел называется «описание», и я пытаюсь заменить узел под названием «ExtendedData»):

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') 

Этот код создает exactally узел мне нужно. Но doc[[1]][[1]][[1]][[2]][[2]] <- newNode dosn't тоже работает.

Итак, любая идея, что я могу сделать? Я попытался сделать простой пример с той же проблемой, но мне не удалось (оператор <- хорошо работает в простых примерах), и я не могу разделить исходный файл KML :(

ответ

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> 
+0

Я попытался использовать 'replaceNodes (doc [[1]] [[1]] [[1]] [[2]] [[2]], newNode)', но говорит, что я не могу использовать объект с класс 'c ('XMLNode', 'RXMLAbstractNode', 'XMLAbstractNode', 'oldClass')'. И я использую xmlTreeParse(), а не 'xmlParse()' (не знаю, если это имеет значение) – Rcoster