как конвертировать XML-файл в фрейм данных в R - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь проанализировать этот xml и поместить его в форму фрейма данных:

содержимое файла выглядит следующим образом:

 <?xml version="1.0" encoding="utf-8" ?> 
- <dashboardreport name="Incident_Rules" version="7.2.5.1022" reportdate="2019-02-20T14:45:57.352-05:00" description="">
- <source name="app1">
- <filters summary="last 30 minutes (auto)">
  <filter>tf:DiagnoseTimeframe?1550690157352:1550691957352</filter> 
  </filters>
  </source>
- <reportheader>
- <reportdetails>
  <user>user1</user> 
  </reportdetails>
  </reportheader>
- <data>
- <incidentchartdashlet name="Incident Chart" description="">
- <incidentchartrecords structuretype="tree">
  <incidentchartrecord rule="Database Exception" systemprofile="app1" /> 
  <incidentchartrecord rule="Response time greater than 30 minutes" systemprofile="app1" /> 
  <incidentchartrecord rule="JVM Heap Utilization > 90%" systemprofile="app1" /> 
  </incidentchartrecords>
  </incidentchartdashlet>
  </data>
  </dashboardreport>

Фрейм данных должен быть таким:

Source Name      Rule
App1         Database Exception
App1         Response time greater than 30 minutes
App1         JVM Heap Utilization > 90%

Необходимо извлечь «Имя источника» и «Правило инцидента в записи».Я пробовал что-то вроде этого:

library("XML")
doc <- read_xml(file)
  dat<-xml_find_all(doc, ".//incidentchartrecord") %>%
    map_df(function(x) {
      xml_find_all(x, ".//incidentchartrecord") %>%
        map_df(~as.list(xml_attrs(.))) %>%
        select(rule) %>%
        mutate(node=xml_attr(x, "incidentchartrecord"))
    })

Есть идеи?

1 Ответ

0 голосов
/ 20 февраля 2019

Вот подход, который работает.Я использовал xml2 вместо этого;там находятся функции xml_find_all & xml_attr.

library(xml2)
doc <- read_xml("test.xml")
source <- xml_attr(xml_find_all(doc,".//source"), "name")
rules <- xml_attr(xml_find_all(doc, ".//incidentchartrecord"), "rule")
df <- data.frame("Source.Name" = source, Rule=rules, stringsAsFactors=F)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...