Обычно проще использовать пакет xml2
, хотя пакет XML
по крайней мере будет иметь go при создании кадра данных, где это разумно.
Набор узлов, полученный из <OverallStatistic>
проще превратить в фрейм данных:
library(XML)
df <- xmlParse(file = "file.xml", useInternalNodes = TRUE)
overall <- xmlToDataFrame(df, nodes = getNodeSet(df, "//OverallStatistic"))
В этом фрейме данных только одна строка:
overall
#> AverageCompressionRatePerMin AverageVentilationRatePerMin
#> 1 96.3298058454348 9.34405124270701
#> MedianCompressionRatePerMin MedianVentilationRatePerMin
#> 1 99.8261838893409 6.51749943203332
#> TotalTimeCompressionsDuringPromptedCprSec TotalTimeCompressionsDuringValidSec
#> 1 0 1277.72862806776
#> TotalTimeCprDuringPromptedCprSec TotalTimeCprDuringValidSec TotalTimePromptedCprSec
#> 1 0 1298.04384154134 0
#> TotalTimeValidSec TotalTimeValidSecEx
#> 1 1339.14938235198 1339.14938235198
Второй узел, <IntervalStatistics>
сложнее синтаксический анализ, поскольку значения хранятся в атрибутах, а не в виде текстовых узлов. Для этого необходимо найти все <CPRStatisticsItem>
узлы, разделить все их атрибуты в список и rbind
их вместе во фрейм данных. В этом случае, поскольку во фрейме данных так много столбцов, я преобразовал его в tibble
вместо фрейма данных просто для удобства вывода на экран:
dplyr::as_tibble(do.call(rbind, lapply(getNodeSet(df, "//CPRStatisticsItem")[-1], xmlAttrs)))
#> # A tibble: 4 x 19
#> Interval ResponsibleForC~ CPRStartTime CPREndTime CPRDurationSec PauseDurationSec
#> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 2 "" 2020-04-18T~ 2020-04-1~ 90.321 12.337
#> 2 3 "" 2020-04-18T~ 2020-04-1~ 239.785 18.89
#> 3 4 "" 2020-04-18T~ 2020-04-1~ 764.77 9.322
#> 4 5 "" 2020-04-18T~ 2020-04-1~ 203.169 0.4910000000000~
#> # ... with 13 more variables: ReasonForPause <chr>, IntervalComments <chr>,
#> # AverageCompressionRatePerMin <chr>, AverageVentilationRatePerMin <chr>,
#> # MedianCompressionRatePerMin <chr>, MedianVentilationRatePerMin <chr>,
#> # TotalTimeCompressionsDuringPromptedCprSec <chr>,
#> # TotalTimeCompressionsDuringValidSec <chr>,
#> # TotalTimeCprDuringPromptedCprSec <chr>, TotalTimeCprDuringValidSec <chr>,
#> # TotalTimePromptedCprSec <chr>, TotalTimeValidSec <chr>, TotalTimeValidSecEx <chr>