Альтернативный подход:

аюсь выполнить некоторые операции очистки, когда действие, которое я выполняю над узлом, зависит от содержимого узла.

Это должен быть минимальный пример:

XML =
'<td class="id-tag">
    <span title="Really Long Text">Really L...</span>
</td>
<td class="id-tag">Short</td>'

page = read_html(XML)

В основном, я хочу извлечьhtml_attr(x, "title") если<span> существует, иначе просто получитеhtml_text(x).

Код для первого:

page %>% html_nodes(xpath = '//td[@class="id-tag"]/span') %>% html_attr("title")
# [1] "Really Long Text"

Код для второго:

page %>% html_nodes(xpath = '//td[@class="id-tag"]') %>% html_text
# [1] "\n    Really L...\n" "Short"  

Настоящая проблема в том, чтоhtml_attr подход не дает мне никакогоNA или что-то подобное для узлов, которые не совпадают (даже если я позволюxpath просто будь'//td[@class="id-tag"]' во-первых, чтобы убедиться, что я сузился только до соответствующих узлов. Это разрушает порядок - я не могу сказать автоматически, была ли оригинальная структура"Really Long Text" на первом или втором узле.

(Я думал о создании соединения, но отображение между сокращенным текстом и полным текстом не является взаимно однозначным / обратимым).

это кажется, на правильном пути - конструкция if / else внутриxpath - но не работает.

В идеале я бы получил вывод:

# [1] "Really Long Text" "Short" 

Ответы на вопрос(2)

Ваш ответ на вопрос