0

给定部分代码:

<td class="tip-val">  
<div class = "bm-block">  
<a rel="nofollow" ..........................  
</a>  
</div>  
"2.04"  
</td>  

我正在尝试获取 2.04(带或不带引号)。据我所知,这@"//td[@class='tip-val']"@"//td[@class='tip-val']/text()"应该工作,但它不起作用。

我认为有些东西带有引号,但我不确定。有人有类似的问题吗?

4

2 回答 2

1

这个问题与引号无关。 问题与您的 XPath 匹配多个节点有关,您认为它只匹配一个节点,然后通过选择匹配节点集的第一个节点让您感到惊讶。 这是 XPath 1.0 的常见问题。

您未向我们显示的数据可能具有另一个属性等于 的td元素。作为测试,尝试删除其他元素或添加唯一 id 并在您的目标上选择它。正如@MartinHonnen 所说,那么应该产生“2.04”,带有引号,并且可能带有一些周围的换行符。classtip-valtdtd//td[@class = 'tip-val']/text()[last()]

为了完整性和将来的参考,还有另一种可能性,尽管我怀疑这不是这里的问题。当存在相邻的分段文本节点并且XPath 1.0 选择这些文本节点中的第一个而不是为我们将它们组合在一起时,这可能会令人困惑。如果您的td-selecting XPath 确实是在选择单个td元素,并且您仍然对所看到的最后一个文本节点感到惊讶,请调查这种 DOM 碎片问题。

于 2013-09-27T13:15:12.750 回答
1

该路径//td[@class = 'tip-val']/text()[last()]将选择td元素的最后一个文本子节点,这样您将在末尾获得包含字符串的文本节点 "2.04"

于 2013-09-27T10:10:01.460 回答