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-схема (со слоями вложенных дочерних элементов), поэтому я удивлен, что не могу найти много информации по этой теме, хотя я могу просто использовать неправильный жаргон в своих поисках. Это мое предположение, что есть простой ответ. У вас есть какие-нибудь предложения?