Рассмотрим этот простой пример
example_xml <- '<?xml version="1.0" encoding="UTF-8"?>
<file>
<book>
<text>abracadabra</text>
<node></node>
</book>
<book>
<text>hello world</text>
<node></node>
</book>
</file>'
myxml <- xml2::read_xml(example_xml)
Теперь это работает, как и ожидалось.
> myxml %>% xml_find_all('//book')
{xml_nodeset (2)}
[1] <book>\n <text>abracadabra</text>\n <node/>\n</book>
[2] <book>\n <text>hello world</text>\n <node/>\n</book>
но поиск узлов, атрибут text
которых содержит wor
, не содержит.
> myxml %>% xml_find_all('//book[contains(@text, "wor")]')
{xml_nodeset (0)}
В чем проблема? Как я могу использовать регулярное выражение (или частичное сопоставление строк) с xml2
?
Спасибо!
text
узлов внутриbook
узлов. Попробуйтеxml_find_all('//book/text[contains(., "wor")]')
- person Wiktor Stribiżew   schedule 08.02.2018[contains(.
с точкой? - person ℕʘʘḆḽḘ   schedule 08.02.2018@
не нужен. - person Parfait   schedule 08.02.2018text()
и.
. Кстати, может быть, вам нужноxml_find_all(myxml, '//book[contains(., "wor")]')
? Результат равен[1] <book>\n <text>hello world</text>\n <node/>\n</book>
, а решение для верхнего комментария дает[1] <text>hello world</text>
. - person Wiktor Stribiżew   schedule 08.02.2018