提取 XML 属性和节点值 R
extract XML attributes and node values R
我在 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>
等等。
我是运行下一个获取"valuer"
信息的代码
valeur = xpathApply(rootNode, "//prix", xmlGetAttr, "valeur")
valeur <- data.frame(matrix(unlist(valeur), byrow=T),stringsAsFactors=FALSE)
实际上,我正在获取 "valuer" 的值,但问题是:我无法确定前三个值属于 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")
)
哪个returns:
id valeur
1 1000001 1304
2 1000001 1285
3 1000001 999
4 1000002 995
5 1000002 977
我在 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>
等等。
我是运行下一个获取"valuer"
信息的代码valeur = xpathApply(rootNode, "//prix", xmlGetAttr, "valeur")
valeur <- data.frame(matrix(unlist(valeur), byrow=T),stringsAsFactors=FALSE)
实际上,我正在获取 "valuer" 的值,但问题是:我无法确定前三个值属于 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")
)
哪个returns:
id valeur
1 1000001 1304
2 1000001 1285
3 1000001 999
4 1000002 995
5 1000002 977