Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
提取XML属性和节点值_Xml_R_Xpath_Children - Fatal编程技术网

提取XML属性和节点值

提取XML属性和节点值,xml,r,xpath,children,Xml,R,Xpath,Children,我在R中有一个XML文件。XML文件如下所示: 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&

我在R中有一个XML文件。XML文件如下所示:

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> 

rootNode这可能不是最优雅的解决方案,但它是我在与一个非常类似的问题进行斗争后唯一能想到的解决方案

以下是将每个pdv节点的id作为属性添加到每个prix子节点的方法:

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
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