xml - 解析 xml 以在 R : how to consistently access nodes when xml structure varies? 中列出

标签 xml r settings

背景

我有一个如下所示的 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

问题

我有两个问题:

  1. 如何提取“level4type1”的唯一值向量

  2. 有更好的方法吗?

最佳答案

尝试使用 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/

相关文章:

python - 对使用哪个 XML 处理选项感到困惑

xml - "incorrect syntax near modify"更新列值的 xml 类型时

java - 使用 Java 计算 XML 文件中标签的重复次数

C# 组合框未正确从列表中填充

django - 如何在 Django 中使用不同的设置进行单元测试?

java - 共享首选项修改mapView的 View

android - 从 Manifest.xml 中读取应用程序标签和名称

r - 按 block 创建索引序列

r - dplyr 或向量化方法中的动态变量评估

r - 使用 ggplot 的 100% 堆叠区域