Mon exemple 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>
Je souhaite extraire la "vitesse", le "code" et la "valeur" pour toutes les entrées lorsque le score est égal à 30. La valeur est présente uniquement lorsque le score est égal à 30, sinon il est omis. Actuellement, mon code est
input <- xmlParse("20160128-235648.xml")
nodes <- getNodeSet(input,"//Segment[@score="30"]")
Cela crée le groupe de nœuds XML "nœuds" contenant des données uniquement lorsque le score est égal à 30. Cela ressemble à ceci
[[4584]]
<Segment code="63365958" speed="41" score="30" c-value="0">
<SubSegment speed="41" offset="0,433"/>
</Segment>
attr(,"class")
[1] "XMLNodeSet"
Cependant, je ne suis pas capable de convertir ce XMLnodeset en dataframe avec les valeurs "code", "cvalue", vitesse ". lapply(nodes, function (x) xmlSApply(x,xmlValue))
extrait des vecteurs vierges de "Subsegment" plutôt que de "Segment".
J'ai également besoin de stocker le "timestamp" dans "SegmentSpeedResults" en tant que variable séparée.
Réponses:
0 pour la réponse № 1Faire sapply avec xAttrs a résolu le problème de l'extraction des valeurs sous le noeud "Segment". CA marchait bien pour moi
nodes <- getNodeSet(input,"//Segment[@score="30"]")
all_parameters <- sapply(nodes, xmlAttrs)