xml con hermanos anidados al marco de datos en R

Soy nuevo en el análisis de XML en R. Estoy tratando de analizar XML en un marco de datos viable. He probado algunas funciones XPath del paquete XML pero parece que no puedo llegar a la respuesta correcta.

Aquí está mi 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>

Cuando corro:

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

Los valores de los nodos secundarios dentro del nodo primario se comprimen en:

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

Si me muevo hacia abajo un nodo, sucede lo mismo:

11111111thAvenue CtWA

Los valores de los nodos secundarios se pegan todos juntos.

También probé un método de fuerza bruta que funcionó un tanto:

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)

pero algunos de los nombres de columna no fueron los esperados:

> 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] debiera ser"YearBuilt", "InteriorFeatures", "Roof", and "Exterior" respectivamente. (Nota al margen: ¿por qué sucede esto?)

Estoy tratando de encontrar una manera de ordenar cada valor atómico en una columna apropiada de un marco de datos con los nombres de las columnas como los nombres de los nodos, incluso dentro de los nodos hijos anidados. Además, mis datos pueden cambiar con el tiempo, por lo que estoy buscando una función dinámica que se ajuste a los datos, produciendo los resultados esperados si es posible.

Me imagino que este es un esquema XML algo común (con capas de niños anidados), por lo que me sorprende no encontrar mucha información sobre el tema, aunque simplemente puedo usar la jerga incorrecta en mis búsquedas. Supongo que hay una respuesta simple. ¿Tienes alguna sugerencia?

Respuestas a la pregunta(1)

Su respuesta a la pregunta