【问题标题】:How to use xml2 in R to set attribute on node set如何在 R 中使用 xml2 设置节点集的属性
【发布时间】:2019-06-12 21:00:21
【问题描述】:

我想使用R 中的xml2 包修改我的节点集中的所有id 属性。

首先,我们确定感兴趣的节点。

library(xml2)

x <- read_xml("<root id='1'><child id ='a' /><child id='b' d='b'/></root>")
nodes <- xml_find_all(x, "//child")  # identify nodes-of-interest

xml_attr(nodes, "id")
#[1] "a" "b"

已提取正确的id 属性。

但是,当我尝试修改这些时,所有节点的值都相同。

xml_attr(nodes, "id") <- c("c", "d")
xml_attr(nodes, "id")
#[1] "c" "c"

我的预期是:

#[1] "c" "d"

为我的节点集设置多个替换的正确语法是什么?

【问题讨论】:

    标签: r xml attributes xml2


    【解决方案1】:

    xml_attr()xml_set_attr() 只能设置一个属性,所以同名元素会得到相同的值。

    xml_attrsxml_set_attrs() 可以设置多个属性,但需要命名空间来区分同名元素。

    一种解决方案:使用purrr::walk2 遍历节点列表和替换值:

    library(xml2)
    library(purrr)
    
    walk2(nodes, c("c", "d"), ~xml_set_attr(.x, "id", .y))
    
    xml_attr(nodes, "id")
    [1] "c" "d"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-26
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多