xml in r: Extraktion von xml-Werte von node-sets

Ich versuche zu extrahieren, die bestimmte xml-Werte aus einer (ziemlich großen) Dokument. Denn ich bin nur daran interessiert, einige Knoten, die ich erstellt Teilmengen.

library(XML)
data.raw <- xmlParse(file="in/data.xml", encoding="UTF-8")
data.top <- xmlRoot(data.raw)
subset.wkr67 <-  getNodeSet(doc=data.top, "//wahl[@jahr='13']/gebiet[@schluessel='67']/wvt")

Dem letzten Objekt sieht wie folgt aus (fyi, das sind Wahlergebnisse mit absoluter Stimme zählt, für bestimmte Bezirke):

[[1]]
<wvt kurz="CDU" lang="Christlich Demokratische Union Deutschlands in Niedersachsen" button="CDU">
    <ergebnis kurz="STWVT" lang="Zweitstimmen">
        <stimmen>21478</stimmen>
        <farbe>#0033CC</farbe>
        <prozent>57.6</prozent>
    </ergebnis>
    <ergebnis kurz="STKAND" lang="Erststimmen">
        <stimmen>25835</stimmen>
        <farbe>#0033CC</farbe>
        <prozent>69.4</prozent>
    </ergebnis>
</wvt>

[[2]]
...   

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

Möchte ich extrahieren Sie die absolute Stimmenauszählung in den verschiedenen Ebenen; Sie sollten gespeichert werden, in separaten Objekten. So weit wie ich bekommen, das sollte möglich sein, mit xmlValue und sapply.

Extrahieren Sie den Wert des "stimmen" - element ein Geschwister der-element "ergebnis" mit dem Attribut "kurz"="STWVT" (in meinem Beispiel: 21478), ich habe versucht, dies zu tun:

sapply(subset.wkr67, xmlValue, '/wvt/ergebnis[@kurz="STWVT"]/stimmen') 
[1] "21478#0033CC57.625835#0033CC69.4" "6640#FFDFDF17.86308#FFDFDF17.0"   "4682#99990012.61410#FFFF993.8"    "2663#CCFFCC7.11888#CCFFCC5.1"    
[5] "708#C979E31.9848#B953EC2.3"       "220.1"                            "3731.0"                           "830.2"                           
[9] "2140.6"                           "1520.4"                           "1220.3"                           "542#F5A5541.5541#F5A5541.5"      
[13] "593#ECF0EC1.6373#ECF0EC1.0" 

Ich irgendwie extrahieren viel zu viele Informationen. (Jedes element ist im Grunde die Werte ALLER Elemente zusammenmontiert. Die Länge von 13 ist okay und passt die Daten an.)
(Wenn ich weitere hinzufügen, die option "recursive=FALSE" in der R-Befehl, meine Ergebnisse sind ein Vektor der gleichen Länge enthält nur Zeichen.)

Wie kann ich das extrahieren nur den ersten Wert des "stimmen" - element? (21478 in meinem Fall) vielen Dank für Ihre Hilfe!

InformationsquelleAutor Max | 2014-03-12
Schreibe einen Kommentar