xml mit verschachtelten Geschwistern zum Datenrahmen in R

Ich bin neu beim Parsen von XML in R. Ich versuche, XML in einen funktionsfähigen Datenrahmen zu analysieren. Ich habe einige XPath-Funktionen aus dem XML-Paket ausprobiert, kann aber anscheinend nicht die richtige Antwort finden.

Hier ist mein XML:

<ResidentialProperty>
    <Listing>
      <StreetAddress>
        <StreetNumber>11111</StreetNumber>
        <StreetName>111th</StreetName>
        <StreetSuffix>Avenue Ct</StreetSuffix>
        <StateOrProvince>WA</StateOrProvince>
      </StreetAddress>
      <MLSInformation>
        <ListingStatus Status="Active"/>
        <StatusChangeDate>2015-07-05T23:48:53.410</StatusChangeDate>
      </MLSInformation>
      <GeographicData>
        <Latitude>11.111111</Latitude>
        <Longitude>-111.111111</Longitude>
        <County>Pierce</County>
      </GeographicData>
      <SchoolData>
        <SchoolDistrict>Puyallup</SchoolDistrict>
      </SchoolData>
      <View>Territorial</View>
    </Listing>
    <YearBuilt>1997</YearBuilt>
    <InteriorFeatures>Bath Off Master,Dbl Pane/Storm Windw</InteriorFeatures>
    <Occupant>
      <Name>Vacant</Name>
    </Occupant>
    <WaterFront/>
    <Roof>Composition</Roof>
    <Exterior>Brick,Cement Planked,Wood,Wood Products</
</ResidentialProperty>

Wenn ich laufe:

ResidentialProperty <- xmlToDataFrame(nodes=getNodeSet(doc,"//ResidentialProperty"))

Die Werte der untergeordneten Knoten im übergeordneten Knoten werden komprimiert auf:

11111111thAvenue CtWA2015-07-05T23:48:53.41011.111111-111.111111PiercePuyallupTerritorial

Wenn ich einen Knoten nach unten gehe, passiert dasselbe:

11111111thAvenue CtWA

Die Werte der untergeordneten Knoten werden alle zusammen eingefügt.

Ich habe auch eine Brute-Force-Methode ausprobiert, die etwas funktioniert hat:

StreetAddress <- xmlToDataFrame(nodes=getNodeSet(doc,"//StreetAddress"))
MLSInformation <- xmlToDataFrame(nodes=getNodeSet(doc,"//MLSInformation"))
GeographicData <- xmlToDataFrame(nodes=getNodeSet(doc,"//GeographicData"))
SchoolData <- xmlToDataFrame(nodes=getNodeSet(doc,"//SchoolData"))
YearBuilt <- xmlToDataFrame(nodes=getNodeSet(doc,"//YearBuilt"))
InteriorFeatures <- xmlToDataFrame(nodes=getNodeSet(doc,"//InteriorFeatures"))
Occupant <- xmlToDataFrame(nodes=getNodeSet(doc,"//Occupant"))
Roof <- xmlToDataFrame(nodes=getNodeSet(doc,"//Roof"))
Exterior <- xmlToDataFrame(nodes=getNodeSet(doc,"//Exterior"))
df <- cbind(StreetAddress, MLSInformation, GeographicData, SchoolData, YearBuilt, InteriorFeatures, Occupant, Roof, Exterior)

, aber einige der Spaltennamen waren nicht wie erwartet:

> colnames(df)
 [1] "StreetNumber"     "StreetName"       "StreetSuffix"     "StateOrProvince"  "ListingStatus"   
 [6] "StatusChangeDate" "Latitude"         "Longitude"        "County"           "SchoolDistrict"  
[11] "text"             "text"             "Name"             "text"             "text"    

colnames[11,12,14,15] sollte sein"YearBuilt", "InteriorFeatures", "Roof", and "Exterior" beziehungsweise. (Randnotiz - warum passiert das?)

Ich versuche, einen Weg zu finden, um jeden atomaren Wert in eine entsprechende Spalte eines Datenrahmens zu sortieren, wobei die Spaltennamen die Namen der Knoten sind, auch innerhalb verschachtelter untergeordneter Knoten. Außerdem können sich meine Daten im Laufe der Zeit ändern. Daher suche ich nach einer dynamischen Funktion, die den Daten entspricht und nach Möglichkeit die erwarteten Ergebnisse liefert.

Ich stelle mir vor, dass dies ein etwas verbreitetes XML-Schema ist (mit Ebenen verschachtelter Kinder), daher bin ich überrascht, nicht viele Informationen zu diesem Thema zu finden, obwohl ich möglicherweise einfach den falschen Jargon für meine Suche verwende. Ich vermute, dass es eine einfache Antwort gibt. Haben Sie Vorschläge?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage