У меня есть XML-документ, подобный показанному ниже:
<root>
<Item>
<A>text1</A>
<B>text2</B>
<C>text3</C>
<C>text4</C>
<C>text5</C>
<D>text6</D>
...
</Item>
<Item>
...
</Item>
...
</root>
Это относительно просто с одним усложняющим фактором: каждый item
может иметь любое количество C
с.
В конечном итоге, я бы хотел, чтобы это было в таблице вроде:
A B C D
1 text1 text2 <list [3]> text6
Я уже создал свою таблицу для других переменных (что, вероятно, грязно, но работает):
vnames<-c("A","B","D")
dat<-list()
for(i in 1:length(vnames)){
dat[[i]]<-xml_text(xml_find_first(nodeset,paste0(".//d1:",vnames[[i]]),xml_ns(xmlfile)))
}
dat<-as.data.frame(dat,col.names=vnames)
Но этот метод работает только тогда, когда xml_find_first
фактически дает вам все, что вы хотите. Я мог бы использовать xml_find_all
, но это делает длины списка неравными для слияния. Я получаю длинный список C
с, и я не знаю, какой из них идет с каким элементом.
Я, конечно, могу пройтись по каждому элементу и xml_find_all
C
с, но это кажется неэффективным,Есть ли более простой способ сделать это?
Извинения, если об этом уже спрашивали;Я не мог найти это. Кроме того, я новичок в XML, поэтому может потребоваться совершенно новый подход. Спасибо!