2017-08-16 2 views
0

Ich bin sicher, dass diese Frage viele Male beantwortet wurde ... aber die Daten, die ich habe, denke ich ist ein bisschen einzigartig. Das Folgende ist ein Teil meines Datensatzes.Parsing xml to Dataframe mit R

<?xml version="1.0" encoding="UTF-8"?> 
<IOTModellerLog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" DeviceID="7430180" ClientID="12324" FileCreationDate="2017-03-01T22:40:03" FileVersion="2" EventClassID="65535" IOTLogCreationDate="2017-03-01T12:29:54" SampleID="1" xsi:noNamespaceSchemaLocation="/opt/nds/ams_proxy/webapps/ams_proxy/WEB-INF/amsXmlSchema.xsd"> 
    <Event EventTime="2017-02-27T18:33:58"> 
     <IOTEvent State="PowerOn" /> 
    </Event> 
    <Event EventTime="2017-02-28T08:59:03"> 
     <DataEvent> 
     <Model>1</Model> 
     <DataType>1</DataType> 
     <DataValue>0301</DataValue> 
     </DataEvent> 
    </Event> 
    <Event EventTime="2017-02-28T08:59:13"> 
     <DataEvent> 
     <Model>1</Model> 
     <DataType>1</DataType> 
     <DataValue>0401</DataValue> 
     </DataEvent> 
    </Event> 
</IOTModellerLog> 

Ich versuche, dies in einen Datenrahmen mit ersten Spalte die EventTime sein zu konvertieren. Das erwartete Format ist wie folgt:

EventTime    Model DataType DataValue 
2017-02-28T08:59:13  1  1   0401 
2017-02-28T08:59:15  1  5   070707 

ich folgendes versucht:

result <- xmlParse("demoxml.xml") 
XML:::xmlAttrsToDataFrame(result["//Event"]) #This just prints only the time 

xmlToDataFrame(nodes=getNodeSet(result,"//DataEvent"))[c("Model","DataType","DataValue")] 

Ich bin nicht sicher, wie bekomme ich die Dataevent-Werte zusammen mit dem Eventtime und nehmen es in einem data.frame .

Kann jemand helfen?

Antwort

1

habe ich so etwas wie dieses

library(XML) 
library(data.table) 
result <- xmlParse('text_XML.xml') 
result_nodes = XML::getNodeSet(result , "//IOTModellerLog/Event") 
rbindlist(lapply(result_nodes,function(x) data.frame(as.list(unlist(xmlToList(x))))),use.names = TRUE, fill = TRUE) 

Ist das Ergebnis Mag ich annehmen

IOTEvent.State .attrs.EventTime DataEvent.Model DataEvent.DataType DataEvent.DataValue 
1:  PowerOn 2017-02-27T18:33:58    NA     NA     NA 
2:    NA 2017-02-28T08:59:03    1     1    0301 
3:    NA 2017-02-28T08:59:13    1     1    0401 

aussieht, ist etwas, das man mit :)

+0

wow arbeiten kann .... vielen Dank! Millionen .... das ist sicher etwas womit ich arbeiten kann .... – Apricot