如何在R中使用xml2在节点集上设置属性

时间:2019-06-12 21:00:21

标签: r xml attributes xml2

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

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

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"

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

1 个答案:

答案 0 :(得分:0)

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"