/ / Análisis de archivos XML en R: Extraiga el marco de datos del conjunto de nodos XML - r, xml-parsing, xmlnode

Análisis de archivos XML en R: Extraiga el marco de datos del conjunto de nodos XML - r, xml-parsing, xmlnode

Mi muestra 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>

Quiero extraer la "velocidad", el "código" y el "cvalue" para todas las entradas cuando la puntuación es igual a 30. cvalue está presente solo cuando la puntuación es 30, de lo contrario se omite. Actualmente mi código es

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

Esto está creando los "nodos" del conjunto de nodos XML que contienen datos solo cuando el puntaje es 30. Se parece a esto

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

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

Sin embargo, no puedo convertir este XMLnodeset en un marco de datos con valores de "código", "cvalue", velocidad ". lapply(nodes, function (x) xmlSApply(x,xmlValue)) está extrayendo vectores en blanco de "Subsegmento" en lugar de "Segmento".

También necesito almacenar la "marca de tiempo" en "SegmentSpeedResults" como una variable separada.

Respuestas

0 para la respuesta № 1

Hacer una aplicación con xAttrs resolvió mi problema de extraer los valores en el nodo "Segmento". Esto funcionó bien para mi

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