R使用XML2将数据从XML提取到数据帧中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R使用XML2将数据从XML提取到数据帧中相关的知识,希望对你有一定的参考价值。

我是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"/>

是否可以将此输出转换为向量或数据帧?

谢谢。

样本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>
答案

已解决:

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”)

以上是关于R使用XML2将数据从XML提取到数据帧中的主要内容,如果未能解决你的问题,请参考以下文章

从postman中以xml格式呈现的响应中提取数据

R-将提取的文本数据(每个实例作为行)导出为data.frame格式

Spotify API:如何将不同级别的 JSON 信息提取到一个数据帧中

使用 spyder 从 2D 数据帧中提取并根据 2D 数据帧中的值位置向 1D 数据帧添加值

如何使用 R 从 xml 页面中提取信息

爬虫进阶数据提取概述篇(巩固加强)