Встраивание XML из файла в RMD

#r-markdown #knitr

Вопрос:

У меня есть XML-файл ( SOME.XML ), содержимое которого я хотел бы встроить в .RMD документ.

Если бы я был доволен тем , что XML находится непосредственно внутри .RMD , я знаю, что мог бы просто сделать:

 ```xml ---some xml here--- ```  

Мои смущающие попытки до сих пор:

 ```{xml code=readr::read_file('SOME.XML')} ```  

…который не удался, так как нет механизма XML.

Я также пытался:

 ````{r results='asis'} cat('```xml') cat(readr::read_file('SOME.XML')) cat('```') ````  

…для которого, хотя вязание завершено, вывод совсем не правильный.

Возможно ли это? (Без сомнения, здесь есть какой-то трюк, который я упускаю!)

При необходимости я мог бы провести предварительную стадию, на которой содержимое XML-файла заменяется, прежде чем впоследствии передавать измененную версию .RMD to rmarkdown::render . Однако я хотел бы избежать этого, если это возможно.


Обновить:

Использование readLines , как предлагается в ответе, вызывает жалобы ...incomplete final line found on 'SOME.XML' . Использование readr::read_file() позволяет избежать этого для меня. Для моего конкретного проекта я сейчас использую:

 ```xml `r readr::read_file("SOME.XML")` ```  

Спасибо @user2554330 за элегантное решение!

Комментарии:

1. Что тебе надо? Извлечь некоторые данные из xml и построить таблицу?

2. Ваш второй подход выглядит довольно близким. Что происходит не так?

Ответ №1:

Вот один из способов сделать это:

 ```xml `r paste(readLines("SOME.XML"), collapse = "n")` ```  

Идея состоит в том, чтобы поместить XML во встроенный R-код. Я думаю, что knitr игнорирует обертки блоков, потому что они не в том {xml ... формате, который он ищет, но он увидит встроенный код и развернет его. Затем Pandoc обработает форматирование.

Вот как изменить свой подход, чтобы заставить его работать:

 ````{r results='asis', echo = FALSE} cat('```xmln') cat(readr::read_file('SOME.XML'), sep = "n") cat('n```n') ````  

Комментарии:

1. Ты все сделал правильно… Мне пришлось немного подправить его readLines , на что я жаловался ....incomplete final line found on 'SOME.XML' . Я покажу свой пересмотренный код в своем первоначальном вопросе. Спасибо!

2. Учитывая ваше первое решение, больше нет необходимости использовать мою работу. Эти верхние 3-кратные строки делают свое дело.

3. В вашем оригинальном подходе есть преимущество: вы могли бы написать функцию, которая выполняла бы все это с помощью вызова типа insertCode(file = "SOME.XML", language = "xml") .

4. Ах, хорошо… Я предполагаю, что вызов функции все равно нужно будет завернуть в {r ...} блок?

5. Да, или встроенную разметку, как я использовал в своем первом подходе.