R извлекает данные из XML в dataframe, используя XML2 - PullRequest
0 голосов
/ 25 октября 2019

Я новичок в R. Пытаюсь проанализировать данные из XML в фрейм данных.

Мне нужен фрейм данных со столбцами:

MAC, device_Online_status, device_onine_threshold, device_online_value.

Был в состоянии принудить первый. Кажется, я не могу получить последние три тега.

Код пока:

library(xml2)
library(tidyverse)
library("stringr")

test_xml <- read_xml("test.xml")

xml_name(test_xml)
xml_name(xml_parent(test_xml))
xml_name(xml_children(test_xml))

# print the full path directory:

test_xml %>% xml_find_all( '//*') %>% xml_path()
test_xml %>% xml_find_all( '//GW_RESPONSE/*') %>% xml_path()

test_xml %>% xml_find_all('//ONLINE_STATUS/*') %>% xml_path()

# device name extracted to a vector
device_name <- test_xml %>% xml_find_all( '//GW_RESPONSE/*') %>% xml_path()
## device_name <- substr(device_name, nchar(device_name) - 12 + 1, nchar(device_name))
device_name <- str_sub(device_name, -12, -1)

Следующие фрагменты показывают мне данные, которые я хочу:

xml_find_first(test_xml, "//ONLINE_STATUS")

вывод:

<DEVICE_ONLINE_STATUS id="DEVICE_ONLINE_STATUS" status="FAIL" threshold="UP" value="DOWN"/>

Любой способ получить эти выходные данные в вектор или фрейм данных?

Спасибо.

SAMPLE XML:

<SQV>
<RESPONSE id="RESPONSE" value="RESPONSE"><GW_RESPONSE id="GW_RESPONSE" status="" threshold="" value=""><GATEWAY_1056117CA4AE id="GATEWAY_1056117CA4AE" status="" threshold="" value=""><ONLINE_STATUS id="ONLINE_STATUS" value=""><DEVICE_ONLINE_STATUS id="DEVICE_ONLINE_STATUS" status="FAIL" threshold="UP" value="DOWN"/></ONLINE_STATUS><DEVICE_STATUS id="DEVICE_STATUS" status="FAIL" threshold="" value="FAIL"/></GATEWAY_1056117CA4AE></GW_RESPONSE></RESPONSE>
</SQV>

1 Ответ

0 голосов
/ 25 октября 2019

решено:

xml_attrs () и xml_attr ()

Получите необходимые данные.

например

xml_find_all (test_xml, "// DEVICE_ONLINE_STATUS ")%>% xml_attrs ()

или

xml_find_all (test_xml," // DEVICE_ONLINE_STATUS ")%>% xml_attr (" id ")

...