/ / Analyser des fichiers XML dans R: extraire une image de données à partir d'un ensemble de nœuds XML - r, analyse xml, xmlnode

Analyse des fichiers XML en R: extraction de la base de données à partir du jeu de noeuds XML - r, xml-parsing, xmlnode

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

Faire 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)