xml - 提取XML属性和节点值R

标签 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>
  <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 [[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)


实际上,我正在获取“值”的值,但问题是:我无法确定前三个值属于rootNode [[1]],而后两个值属于rootNode [[2]],因此上。

如何创建一个变量,该变量指示三个第一个值属于rootNode [[1]],另外两个属于rootNode [[2]]?或者至少我该如何放置一个条件,该条件仅带给我属于rootNode [[1]]的值?

最佳答案

这可能不是最优雅的解决方案,但它是我在遇到一个非常类似的问题后所能想到的唯一解决方案。

这是一种将来自每个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

关于xml - 提取XML属性和节点值R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33591401/

相关文章:

对错误命名空间的 .net xml 模式验证

xml - 如何修复丑陋的 XQuery 输出?

python - 使用python修改xml值文件

r - 如何在 R 中与 litR 并行处理 LAScatalog

r - 如何计算pivot_wider数据框中患者总数的百分比?

javascript - 如何在 IE11 中运行 xPath 查询?

c# - Xml 解析器类的单元测试

r - ggplot2 中的非线性回归线和 R²

dom - 由 br 连接的 XPath 节点文本

html - 标签后面的单词的 XPath?