我想使用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"
为节点集设置多个替换项的正确语法是什么?
答案 0 :(得分:0)
xml_attr()
或xml_set_attr()
只能设置单个属性,因此具有相同名称的元素将获得相同的值。
xml_attrs
或xml_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"