Через POST-запрос с использованием пакета httr
я возвращаю XML в следующем формате: -
<ReportDelivery responsecode="0" responsetext="descriptive text">
<Terminal isn="DCC000000001" imo="111111111" name="MV Vessel A">
<Report>
<DateTime>01/10/2014 15:30:45</DateTime>
<Lat>99.9999999</Lat>
<Lon>999.9999999</Lon>
<Cog>999</Cog>
<Sog>999</Sog>
<Voltage>99</Voltage>
<Status>Description of status</Status>
</Report>
<Report>
..
</Report>
</Terminal>
<Terminal isn="DCC000000002" imo="222222222" name="MV Vessel B">
..
</Terminal>
</ReportDelivery>
Я могу получить часть «Отчет» во фрейме данных, используя две доступные функции здесь : -
#Using functions from https://rud.is/rpubs/xml2power/
xtrct <- function(doc, target) { xml_find_all(doc, target) %>% xml_text() %>% trimws() }
xtrct_df <- function(doc, top) {
xml_find_first(doc, sprintf(".//%s", top)) %>%
xml_children() %>%
xml_name() %>%
map(~{
xtrct(doc, sprintf(".//%s/%s", top, .x)) %>%
list() %>%
set_names(tolower(.x))
}) %>%
flatten_df() %>%
readr::type_convert()
}
x <- xtrct_df(doc, "Report")
В каждом терминальном узле имеется несколько отчетов, относящихся к конкретному судну, атрибуты которого заданы в терминальном узле.
В настоящее время столбцы в x
:
names(x)
[1] "datetime" "lat" "lon" "cog" "sog" "voltage" "status"
Как я могу добавить название корабля в виде столбца к этому фрейму данных? Я могу извлечь атрибут имени, используя: -
xattrs <- xpathSApply(z, "//*/Terminal/@name")
BВне не знаете, как включить это значение в переменную в кадре данных. Буду признателен за помощь, пожалуйста.