Как использовать xml2 в R для установки атрибута на множестве узлов - PullRequest
0 голосов
/ 13 июня 2019

Я хотел бы изменить все атрибуты 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 голосов
/ 13 июня 2019

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"
...