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")&nbsp;E se<span>&nbsp;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&nbsp;abordagem não me dá nenhumaNA&nbsp;ou algo semelhante para os nós que não correspondem (mesmo que eu deixe oxpath&nbsp;apenas seja'//td[@class="id-tag"]'&nbsp;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"&nbsp;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&nbsp;parece estar no caminho certo - uma construção if / else dentro doxpath&nbsp;- mas não funciona.

Idealmente, eu obteria a saída:

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