提取XML属性和节点值R

问题描述:

我有一个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]]的值?

这可能不是最完美的解决方案,但它是唯一一个我能想出一个非常类似的问题挣扎之后。

下面是从每个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