我有以下部分HTML,我想从中获取最后一个< br> - 表示此示例中的link元素和TEXT5。
<td>
<span>
<span>TEXT1</span>
</span>
<br>
TEXT2
<span>TEXT3</span>
<br>
<a href=...>TEXT4</a>
TEXT5
<td>
使用
获取link元素相对容易td/br[last()]/following-sibling::*
但是有没有办法获得TEXT5?
编辑:我应该补充说我正在使用Java。这与问题无关,但可能与解决方案有关: - )
答案 0 :(得分:1)
正如您所观察到的,*
只返回元素,而您需要在此处返回元素节点和文本节点。您可以使用node()
代替,它将返回任何类型的节点:
td/br[last()]/following-sibling::node()
如果您愿意,也可以更具体,例如,您可以添加谓词以将节点类型限制为a
元素或文本节点:
td/br[last()]/following-sibling::node()[self::a|self::text()]
尽管XPath表达式本身有效,但是有可能你的Java API不支持返回混合类型的节点,我不知道。
答案 1 :(得分:0)
您可以捕获&#34; td&#34;中的所有文本,这将为您提供&#34; TEXT1TEXT2TEXT3TEXT4TEXT5&#34;,然后gsub它以删除从第一个字符到TEXT4结尾的所有内容。 当然,您需要知道什么是TEXT4的字符串。
对于isntance,
library(tidvyverse)
library(rvest)
Text4 <- read_html('your.html') %>% html_node(xpath = "//td/br/a") %>% html_text()
OnlyText5 <- read_html('your.html') %>% html_node(xpath = "//td") %>% html_text() %>% gsub(paste0('.*',Text4) ,'', . )