2017-05-30 97 views
0

我遇到了問題。我有一個XML文檔,我需要到R. 到目前爲止,我設法它使用包xmlplyr,做一個簡單的XML上傳到data.frame將xml文檔轉換爲data.frame中的R

dataframe=ldply(xmlToList("file.xml"), data.frame) 

但是當一個data.frame我運行這個XML:

<BusinessUnitList> 
    <BusinessUnit id="000000195"> 
     <User id="897654322" firstName="Rick" lastName="Test" middleName="R" defaultLanguageName="English"> 
     <RoleList> 
      <Role id="worker"/> 
     </RoleList> 
     <OrgList> 
      <Organization id="1111"/> 
     </OrgList> 
     <Address country="Italy"/> 
     <Employee badgeNumber="575757" Date="2017-01-01" DateNew="2017-01-02" birthDate="1999-01-01"> 
      <Availability val1="5" val2="n" val3="6" HoursPerWeek="33.75" HoursBetweenShifts="10" minHoursPerWeek="00.00"/> 
     </Employee> 
     </User> 
</BusinessUnit> 
    <BusinessUnit id="000000111"> 
     <User id="897652222" firstName="TERI" lastName="tst2" middleName="D" defaultLanguageName="English"> 
     <RoleList> 
      <Role id="worker"/> 
     </RoleList> 
     <OrgList> 
      <Organization id="2222"/> 
     </OrgList> 
     <Address country="Portugal"/> 
     <Employee badgeNumber="575757" Date="2017-02-02" DateNew="2017-02-02" birthDate="1998-01-01"> 
      <Availability val1="5" val2="n" val3="6" HoursPerWeek="33.75" HoursBetweenShifts="10" minHoursPerWeek="00.00"/> 
     </Employee> 
     </User> 
     </BusinessUnit> 
    </BusinessUnitList> 

我收到一個錯誤:Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : arguments imply differing number of rows: 9, 7.

+0

請提供樣本數據和代碼。 – PhilC

+2

爲了能夠爲您提供幫助,我們需要了解您對輸出格式有何期待(您希望在哪個列中輸入哪些信息?) – sinQueso

+0

實際上,XML [*] [1]不太可能存在文件。您應該花一些時間來了解錯誤(至少一列沒有相同數量的條目)。您可能需要像XML文件那樣經常進行工作。 SO上有大量的XML處理問答。你似乎完全沒有做過研究。 – hrbrmstr

回答

0

您試圖列表結合這樣

list(a=1:2, b=3:5) 
$a 
[1] 1 2 

$b 
[1] 3 4 5 

data.frame(list(a=1:2, b=3:5)) 
Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : 
    arguments imply differing number of rows: 2, 3 

我可能會取消列出xmlToList結果並格式化列名稱。

doc <- xmlParse("file.xml") 
x <- data.frame(t(unlist(xmlToList(doc)))) 
names(x) <- gsub("(..attrs)?.id$", "_id", names(x)) 
names(x) <- gsub(".*\\.", "", names(x)) 

    Role_id Organization_id country val1 val2 val3 HoursPerWeek HoursBetweenShifts minHoursPerWeek badgeNumber  Date DateNew birthDate User_id firstName lastName middleName defaultLanguageName BusinessUnit_id 
1 worker   1111 Italy 5 n 6  33.75     10   00.00  575757 2017-01-01 2017-01-02 1999-01-01 897654322  Rick  Test   R    English  000000195 
+0

嗨Chris,感謝您的時間。我能夠運行該示例,它的工作正常,它格式化我期望的數據,但是當我添加第二個孩子時,數據框中的輸出僅顯示一個記錄(最後一個),我將獲得更多記錄。有趣的是,如果我打印「x」對象控制檯打印我的兩個記錄,所以我不明白爲什麼這種行爲。此外,在某些時候我缺少數據,我會更新XML,以便獲得我的觀點。 –