Я пытаюсь разобрать XML в R, используя пакет XML от Duncan Temple Lang. Код у меня выглядит следующим образом:Добавить новую строку в data.frame в рекурсивной функции в R
library(XML)
retrieveStructureInfo <- function(node, tableData) {
tableD <- data.frame(path = NA, node = NA, value = NA)
for (i in 1 : xmlSize(xmlAttrs(node))) {
tableD <- rbind(tableD, c("path", "node", "value"))
tableData <<- rbind(tableData, tableD)
}
#children is the no. of nodes within a node
for (i in 1 : children) {
#recursive function call
retrieveStructureInfo(node[[i]], tableD)
}
}
#parse xml document
#xmlfile is the file path
doc <- xmlParse(xmlfile)
r <- xmlRoot(doc)
tableData <- data.frame(path = NA, node = NA, value = NA)
retrieveStructureInfo(r, tableData)
tableData
У меня возникли проблемы при добавлении строк в data.frame, потому что это делается в рекурсивной функции. Для XML, приведенного ниже, в data.frame добавляются только последние два значения атрибута, то есть Source = "b" и Available = "true". Я создал основную таблицу tableData и попытаюсь обновить ее с помощью локальной таблицы в функции tableD, но она не работает.
<CATALOG>
<PLANT>
<COMMON Source="a" Available="false">Bloodroot</COMMON>
</PLANT>
<PLANT>
<COMMON Source="b" Available="true">Columbine</COMMON>
</PLANT>
</CATALOG>
Я забыл добавить, что я стремлюсь создать функцию, которая считывает любой XML (именно поэтому я пошел с идеей рекурсии) и дает выход:
path node value parent type
CATALOG/PLANT/COMMON Source a PLANT attribute
CATALOG/PLANT/COMMON Available false PLANT attribute
CATALOG/PLANT/COMMON COMMON Bloodroot PLANT text
Спасибо за ваш ответ Крис. Из моего понимания XPath требуется указать путь. Но я создаю функцию, которая должна анализировать XML независимо от того, какой XML-скрипт ему предоставляется. Он должен анализировать XML и производить вывод, как в моем вопросе. – user2877232