我有一个XML文件,我试图从元素中获取所有信息" identificatie"和" gebruiksdoelVerblijfsobject"并希望将它们放入数据帧(甚至更好的data.table,但这不是强制性的)。 XML文件包含许多元素。我将尝试用我的XML新手解释。
这是文件本身:http://www.filedropper.com/xmlfile
文件结构如下。
BAG-Extract-Deelbestand-LVC
antwoord
vraag
producten
LVC-product (list of 1774)
Verblijfsobject
identificatie
gebruiksdoelVerblijfsobject
我能够得到一个"识别"和" gebruiksdoelVerblijfsobject"但我似乎无法将它们全部从XML文件中删除。
有人可以帮帮我吗?库(XML)已启用。
亲切的问候和提前谢谢,
罗伯特
答案 0 :(得分:3)
您需要使用提供的namespaces
:
xData <- xmlParse("PATH/ToFILE")
identificatie <- xpathSApply(xData,
path = "//product_LVC:LVC-product/*/bag_LVC:identificatie"
, xmlValue)
> head(identificatie)
[1] "0362010002211033" "0362010002211034" "0362010002211035" "0362010002211036"
[5] "0362010002211037" "0362010002211038"
gebruiksdoelVerblijfsobject <- xpathSApply(xData,
path = "//product_LVC:LVC-product/*/bag_LVC:gebruiksdoelVerblijfsobject"
, xmlValue)
> head(gebruiksdoelVerblijfsobject)
[1] "overige gebruiksfunctie" "overige gebruiksfunctie" "overige gebruiksfunctie"
[4] "overige gebruiksfunctie" "overige gebruiksfunctie" "overige gebruiksfunctie"
> unique(gebruiksdoelVerblijfsobject)
[1] "overige gebruiksfunctie" "bijeenkomstfunctie" "kantoorfunctie"
[4] "industriefunctie" "sportfunctie" "winkelfunctie"
[7] "woonfunctie" "gezondheidszorgfunctie" "logiesfunctie"
[10] "onderwijsfunctie"
编辑:找到不匹配
voNodes <- getNodeSet(xData, path = "//product_LVC:LVC-product/bag_LVC:Verblijfsobject")
out <- lapply(voNodes, function(x){
identificatie <- xpathSApply(x, "./bag_LVC:identificatie", xmlValue, namespaces= c(bag_LVC = "http://www.kadaster.nl/schemas/imbag/lvc/v20090901"))
gebruiksdoelVerblijfsobject <- xpathSApply(x, path = "./bag_LVC:gebruiksdoelVerblijfsobject", xmlValue, namespaces= c(bag_LVC = "http://www.kadaster.nl/schemas/imbag/lvc/v20090901"))
list(id = identificatie, gvo = gebruiksdoelVerblijfsobject)
})
> which(sapply(lapply(out, "[[", "gvo"), length) != 1)
[1] 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1409 1410 1647
[18] 1648 1649 1708 1740
对于上面列出的这些节点,gvo
有id
的1个条目。
voNodes <- getNodeSet(xData, path = "//product_LVC:LVC-product/bag_LVC:Verblijfsobject")
# for each product get the
out <- lapply(voNodes, function(x){
identificatie <- xpathSApply(x, "./bag_LVC:identificatie", xmlValue, namespaces= c(bag_LVC = "http://www.kadaster.nl/schemas/imbag/lvc/v20090901"))
gebruiksdoelVerblijfsobject <- xpathSApply(x, path = "./bag_LVC:gebruiksdoelVerblijfsobject", xmlValue, namespaces= c(bag_LVC = "http://www.kadaster.nl/schemas/imbag/lvc/v20090901"))
data.frame(id = identificatie, gvo1 = gebruiksdoelVerblijfsobject[1], gvo2 = gebruiksdoelVerblijfsobject[2])
})
require(plyr)
res <- rbind.fill(out)
> head(res)
id gvo1 gvo2
1 0362010002211033 overige gebruiksfunctie <NA>
2 0362010002211034 overige gebruiksfunctie <NA>
3 0362010002211035 overige gebruiksfunctie <NA>
4 0362010002211036 overige gebruiksfunctie <NA>
5 0362010002211037 overige gebruiksfunctie <NA>
6 0362010002211038 overige gebruiksfunctie <NA>