提取XML属性和节点值
我在R中有一个XML文件。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&
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