Я пытаюсь редактировать файл 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 :(
Я попытался использовать 'replaceNodes (doc [[1]] [[1]] [[1]] [[2]] [[2]], newNode)', но говорит, что я не могу использовать объект с класс 'c ('XMLNode', 'RXMLAbstractNode', 'XMLAbstractNode', 'oldClass')'. И я использую xmlTreeParse(), а не 'xmlParse()' (не знаю, если это имеет значение) – Rcoster