如何用单条XPath查询选取HTML表格<td>内的最深层元素
嘿,我来帮你搞定这个XPath的问题!
你想要用单条XPath直接抓取每个<td>里的最深层文本,当前用的//table/tr/td/*[last()]/text()其实有点小问题——第一个<td>里的test能拿到,但第二个<td>里的最深层是<span>里的test2,这个表达式会选中<td>下最后一个子元素<div class="header">,可这个div还有子元素,所以取到的文本是空,达不到你的预期。
给你调整一下XPath,直接定位到每个<td>下没有子元素的最深层节点,再提取文本:
//table/tr/td//*[not(*)]/text()
为啥这个表达式管用?
//table/tr/td:先定位到表格里的所有<td>元素//*[not(*)]:在每个<td>的后代里,挑出那些完全没有子元素的节点——这就是你要的最深层元素/text():把这些节点里的文本内容提取出来
跑这个表达式的话,就能精准得到你想要的结果:
- Text='test'
- Text='test2'
要是你担心以后会遇到文本直接在<td>里(没有嵌套任何元素)的情况,还可以用更健壮的版本,兼容这种场景:
//table/tr/td//text()[not(parent()/*)]
这个是直接找所有“父节点没有子元素”的文本节点,不管文本所在的节点是不是<td>的直接子元素,通用性更强。
内容的提问来源于stack exchange,提问作者3lvinaz
相关产品推荐
相关产品推荐

