2015-11-08 112 views
0

我有一個XML文件中R. XML文件看起來像這樣:提取XML屬性和節點值R

rootNode <- xmlRoot(xmlfile) 
rootNode[[1]] 

<pdv id="1000001" latitude="4620114" longitude="519791" cp="01000" pop="R"> 
    <adresse>ROUTE NATIONALE</adresse> 
    <ville>SAINT-DENIS-LèS-BOURG</ville> 
    <ouverture debut="01:00" fin="01:00" saufjour=""/> 
    <services> 
    <service>Automate CB</service> 
    <service>Vente de gaz domestique</service> 
    <service>Station de gonflage</service> 
    </services> 
    <prix nom="Gazole" id="1" maj="2014-01-02 11:08:03" valeur="1304"/> 
    <prix nom="SP98" id="6" maj="2014-12-31 08:39:46" valeur="1285"/> 
    <prix nom="Gazole" id="1" maj="2007-02-28 07:48:59.315736" valeur="999"/> 
    <fermeture/> 
    <rupture/> 
</pdv> 

的根節點[[2]]是:

<pdv id="1000002" latitude="4621842" longitude="522767" cp="01000" pop="R"> 
    <adresse>16 Avenue de Marboz</adresse> 
    <ville>BOURG-EN-BRESSE</ville> 
    <ouverture debut="08:45" fin="19:30" saufjour="Dimanche"/> 
    <services> 
    <service>Automate CB</service> 
    <service>Vente de gaz domestique</service> 
    <service>Station de gonflage</service> 
    </services> 
    <prix nom="Gazole" id="1" maj="2007-01-02 08:34:29.101626" valeur="995"/> 
    <prix nom="Gazole" id="1" maj="2007-01-26 09:49:39.197356" valeur="977"/> 
    <fermeture/> 
    <rupture/> 
</pdv> 

等上。

我運行的下一個代碼,以獲取有關「評估師」

valeur = xpathApply(rootNode, "//prix", xmlGetAttr, "valeur") 
valeur <- data.frame(matrix(unlist(valeur), byrow=T),stringsAsFactors=FALSE) 

其實,我得到的「評估師」的價值觀,但問題的信息是:我不能確定,這三個第一值屬於根節點[[1]]和最後兩個值屬於根節點[[2]]等。

如何創建變量,指示三個第一值屬於根節點[[1]]和另外兩個到根節點[[2]]?或者至少我怎麼能把一個條件,只是給我屬於rootNode [[1]]的值?

回答

1

這可能不是最完美的解決方案,但它是唯一一個我能想出一個非常類似的問題掙扎之後。

下面是從每個PDV節點添加了ID爲每個大獎賽子節點的屬性的方法:

for (i in 1:xmlSize(rootNode)) {     

    id = xmlGetAttr(node = rootNode[[i]],  
        name = "id")     

    sapply(X = rootNode[[i]]["prix"],   
      fun = addAttributes,     
      id = id)         
} 

根據您的需求,然後你可以輕鬆地創建這兩個相匹配的數據幀值:

data.frame (id  = xpathSApply(rootNode, "//prix", xmlGetAttr, "id"), 
      valeur = xpathSApply(rootNode, "//prix", xmlGetAttr, "valeur") 
) 

它返回:

 id valeur 
1 1000001 1304 
2 1000001 1285 
3 1000001 999 
4 1000002 995 
5 1000002 977