我有一个xml设置文件,如下所示:
<level1>
<level2>
<level3>
<level4name>bob</level4name>
</level3>
</level2>
</level1>
但可能有多个level3
<level1>
<level2>
<level3>
<level4name>bob</level4name>
</level3>
<level3>
<level4name>jack</level4name>
</level3>
<level3>
<level4name>jill</level4name>
</level3>
</level2>
</level1>
每个level4
还可以有多种类型的level3
节点:
<level3>
<level4name>bob</level4name>
<level4dir>/home/bob/ </level4dir>
<level4logical>TRUE</level4logical>
</level3>
在R中,我使用
加载此文件settings.xml <- xmlTreeParse(settings.file)
settings <- xmlToList(settings.xml)
我想编写一个脚本,将level4type1
中包含的所有值转换为此级别的唯一值的向量,但我很难以尝试以适用于所有这些的方式执行此操作以上案例。
其中一个问题是class(settings[['level2']])
是前两个案例的列表和第三个案例的矩阵。
> xmlToList(xmlTreeParse('case1.xml'))
$level2.level3.level4name
[1] "bob"
> xmlToList(xmlTreeParse('case2.xml'))
level2
level3.level4name "bob"
level3.level4name "jack"
level3.level4name "jill"
> xmlToList(xmlTreeParse('case3.xml'))
level2
level3 List,3
level3 List,1
level3 List,1
我有两个问题:
如何提取'level4type1`唯一值的向量
有更好的方法吗?
答案 0 :(得分:18)
尝试使用XML的内部节点表示和非常强大的xpath语言。
> xml = xmlTreeParse("case2.xml", useInternalNodes=TRUE)
> xpathApply(xml, "//level4name", xmlValue)
[[1]]
[1] "bob"
[[2]]
[1] "jack"
[[3]]
[1] "jill"