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 № 1Hacer 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)