Мне нужно преобразовать некоторый ванильный xml в фрейм данных. XML представляет собой простое представление прямоугольных данных (см. пример ниже). Я могу довольно просто добиться этого в R с помощью xml2 и пары циклов for. Однако я уверен, что есть способ намного лучше/быстрее (муррр?). XML-файлы, с которыми мне в конечном итоге придется работать, очень велики, поэтому предпочтительны более эффективные методы. Буду признателен за любые советы от сообщества.
library(tidyverse)
library(xml2)
demo_xml <-
"<DEMO>
<EPISODE>
<item1>A</item1>
<item2>1</item2>
</EPISODE>
<EPISODE>
<item1>B</item1>
<item2>2</item2>
</EPISODE>
</DEMO>"
dx <- read_xml(demo_xml)
episodes <- xml_find_all(dx, xpath = "//EPISODE")
dx_names <- xml_name(xml_children(episodes[1]))
df <- data.frame()
for(i in seq_along(episodes)) {
for(j in seq_along(dx_names)) {
df[i, j] <- xml_text(xml_find_all(episodes[i], xpath = dx_names[j]))
}
}
names(df) <- dx_names
df
#> item1 item2
#> 1 A 1
#> 2 B 2
Создано 19 сентября 2019 г. с помощью пакета reprex (v0.3.0)
Заранее спасибо.