R {xml_node} у звичайний текст зі збереженням тегів?

Я хотів би зробити саме те, що роблять xml2::xml_text() або rvest::html_text(), але зберегти теги замість заміни, наприклад, <br> з \n. Метою є, наприклад, скопіюйте веб-сторінку, витягніть потрібні вузли та збережіть звичайний HTML у змінній, подібно до того, як write_html() зберігає його у файлі.

Як я можу це зробити?


person Harold Cavendish    schedule 14.09.2018    source джерело
comment
Звертаючись по допомогу, ви повинні включити простий приклад, який можна відтворити із зразком введення та бажаним виходом, який можна використовувати для тестування та перевірки можливих рішень.   -  person MrFlick    schedule 14.09.2018
comment
@MrFlick Я знаю, але тут я задаю дуже загальне запитання, тому вважаю, що наданого мною опису має бути достатньо. Рішення, яке я шукаю, — це одна функція, уже реалізована в xml2, лише без відкидання тегів або того, що робить інша функція, лише з виведенням в іншу змінну замість зовнішнього файлу.   -  person Harold Cavendish    schedule 14.09.2018
comment
Отже, ви хочете зберегти XML як рядок без аналізу? Чому ви не можете просто прочитати це як рядок? Або ви бажаєте пройти/змінити дерево за допомогою xml2, а потім отримати вивід конкретних частин як необроблений рядок без аналізу?   -  person divibisan    schedule 14.09.2018
comment
@divibisan Справді. Оскільки структура даних — це список із зовнішніми покажчиками, і я не знаю, як перетворити це на рядок.   -  person Harold Cavendish    schedule 14.09.2018


Відповіді (1)


За іронією долі, виявляється, що as.character() працює чудово.

Тому:

library(rvest)
html <- read_html("http://stackoverflow.com")

res <– html %>%
         html_node("h1") %>%
         as.character()

> res

[1] "<h1 class=\"-title\">Learn, Share, Build</h1>"

Це бажаний вихід у моєму поточному випадку використання.

З іншого боку, для порівняння, якщо потрібно видалити теги:

res <- html %>%
         html_node("h1") %>%
         html_text()

> res
[1] "Learn, Share, Build"
person Harold Cavendish    schedule 15.09.2018