/ / Analisi dei file XML in R: Estrai dataframe da nodeset XML - r, xml-parsing, xmlnode

Analisi di file XML in R: estrazione del dataframe da nodeset XML - r, xml-parsing, xmlnode

Il mio esempio XML

- <Inrix responseId="123" statusText="" createdDate="2016-01-29T05:57:00Z">
- <SegmentSpeedResultSet coverage="255">
- <SegmentSpeedResults timestamp="2016-01-29T05:56:47Z">
- <score="10" speed="57" code="4814018">
<SubSegment speed="57" offset="0,1753"/>
</Segment>
- <score="30" speed="57" code="4814018" cvalue="57">
<SubSegment speed="57" offset="0,1753"/>
</Segment>
</SegmentSpeedResults>
</SegmentSpeedResultSet>
</Inrix>

Voglio estrarre la "velocità", "codice" e "cvalue" per tutte le voci quando il punteggio è uguale a 30. Il valore di cvalue è presente solo quando il punteggio è 30 altrimenti viene omesso. Attualmente il mio codice è

input <- xmlParse("20160128-235648.xml")
nodes <- getNodeSet(input,"//Segment[@score="30"]")

Questo sta creando i "nodi" del nodeset XML contenenti dati solo quando il punteggio è 30. Sembra che sia così

    [[4584]]
<Segment code="63365958" speed="41" score="30" c-value="0">
<SubSegment speed="41" offset="0,433"/>
</Segment>

attr(,"class")
[1] "XMLNodeSet"

Tuttavia, non sono in grado di convertire questo XMLnodeset in un dataframe con valori di "code", "cvalue", velocità ". lapply(nodes, function (x) xmlSApply(x,xmlValue)) sta estraendo i vettori in bianco da "Sottosegmento" anziché da "Segmento".

Devo anche memorizzare il "timestamp" in "SegmentSpeedResults" come variabile separata.

risposte:

0 per risposta № 1

Facendo sbrigativamente con xAttrs ho risolto il mio problema di estrarre i valori sotto il nodo "Segment". Questo ha funzionato bene per me

nodes <- getNodeSet(input,"//Segment[@score="30"]")
all_parameters <- sapply(nodes, xmlAttrs)