XML с вложенными братьями и сестрами к фрейму данных в R

Я новичок в разборе XML в R. Я пытаюсь разобрать XML в работающий фрейм данных. Я пробовал некоторые функции XPath из пакета XML, но не могу найти правильный ответ.

Вот мой 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>

Когда я бегу:

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

Значения дочерних узлов в родительском узле сжимаются в:

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

Если я перейду на один узел вниз, произойдет то же самое:

11111111thAvenue CtWA

Все значения дочерних узлов вставляются вместе.

Я также попробовал метод грубой силы, который работал несколько:

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)

но некоторые имена столбцов были не такими, как ожидалось:

> 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] должно быть"YearBuilt", "InteriorFeatures", "Roof", and "Exterior" соответственно. (Примечание: почему это происходит?)

Я пытаюсь найти способ сортировки каждого атомарного значения в соответствующий столбец фрейма данных с именами столбцов, являющимися именами узлов, даже внутри вложенных дочерних узлов. Кроме того, мои данные могут со временем меняться, поэтому я ищу динамическую функцию, которая бы соответствовала данным, и, если возможно, дала бы ожидаемые результаты.

Я предполагаю, что это довольно распространенная XML-схема (со слоями вложенных дочерних элементов), поэтому я удивлен, что не могу найти много информации по этой теме, хотя я могу просто использовать неправильный жаргон в своих поисках. Это мое предположение, что есть простой ответ. У вас есть какие-нибудь предложения?

Ответы на вопрос(1)

Ваш ответ на вопрос