背景
我有一个如下所示的 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>
每个level3
也可以有多种类型的level4
节点:
<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”的唯一值向量
有更好的方法吗?
最佳答案
尝试使用 XML 的内部节点表示和 xpath语言,非常强大。
> xml = xmlTreeParse("case2.xml", useInternalNodes=TRUE)
> xpathApply(xml, "//level4name", xmlValue)
[[1]]
[1] "bob"
[[2]]
[1] "jack"
[[3]]
[1] "jill"
关于xml - 解析 xml 以在 R : how to consistently access nodes when xml structure varies? 中列出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5424859/