Equivalente a qual na raspagem?

Estou tentando executar algumas raspagens, nas quais a ação que tomo em um nó depende do conteúdo do nó.

Este deve ser um exemplo mínimo:

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

page = read_html(XML)

Basicamente, eu quero extrairhtml_attr(x, "title") E se<span> existe, caso contrário, é só pegarhtml_text(x).

O código para fazer o primeiro é:

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

O código para fazer o segundo é:

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

O verdadeiro problema é que ohtml_attr abordagem não me dá nenhumaNA ou algo semelhante para os nós que não correspondem (mesmo que eu deixe oxpath apenas seja'//td[@class="id-tag"]' primeiro para ter certeza de que reduzi apenas os nós relevantes primeiro. Isso destrói a ordem - não sei dizer automaticamente se a estrutura original tinha"Really Long Text" no primeiro ou no segundo nó.

(Pensei em fazer uma junção, mas o mapeamento entre o texto abreviado e o texto completo não é um para um / é invertível).

este parece estar no caminho certo - uma construção if / else dentro doxpath - mas não funciona.

Idealmente, eu obteria a saída:

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

questionAnswers(2)

yourAnswerToTheQuestion