Извлечь атрибуты с одинаковыми именами для всех узлов в XML-файле, используя R - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь извлечь все атрибуты (с тем же именем) в XML-файл. В настоящее время использует пакет xml2 и надеется добиться успеха с функциями xml_attr или xml_attrs.

library(xml2)

# basic xml file
x <- read_xml("<a>
  <b><c>123</c></b>
  <b><c>456</c></b>
</a>")

# add a few attributes with the same name of "Fake ID"
xml_set_attr(xml_child(x, 'b[1]'), 'FakeID', '11111')
xml_set_attr(xml_child(x, 'b[2]'), 'FakeID', '22222')
xml_set_attr(xml_child(xml_child(x, 'b[2]'), 'c'), 'FakeID', '33333')

# this will give me attributes only when I call a specific child node
xml_attr(xml_child(x, 'b[1]'), 'FakeID')
# this does not give me any attributes with the name "FakeID" because the current node
#   doesn't have that attribute
xml_attr(x, 'FakeID')

То, на что я в конечном итоге надеюсь, это вектор, который дает значение каждого узла в XML, который имеет атрибут "FakeID"; c('11111', '22222', '33333')

1 Ответ

1 голос
/ 26 июня 2019

Я использовал пакет rvest, потому что он реэкспортирует функции xml2, но также реэкспортирует оператор %>%.Затем я сделал ваш xml строкой, чтобы было ясно, что там находится, и добавил второй атрибут к вашему первому узлу.

В xml_nodes() Я выбираю все узлы с помощью селектора * css и указываю, что только яхотите узлы, имеющие атрибут FakeID с [FakeID].

library(rvest)

"<a>
   <b FakeID=\"11111\" RealID=\"abcde\">
     <c>123</c>
   </b>
   <b FakeID=\"22222\">
     <c FakeID=\"33333\">456</c>
   </b>
</a>" %>% 
  read_xml() %>% 
  xml_nodes("*[FakeID]") %>% 
  xml_attrs() %>% 
  pluck("FakeID") %>% 
  unlist()
...