Hiall,
我已经和他斗争了几天了。我已经尝试了所有我能想到的东西和网上的一切。我正试图从浏览器呈现的表格(从每个表格)中提取文本,无论其他的是什么(我确定还有其他情况)。我认为这几乎可以说明问题(我尽可能地保持这个问题)。
<html>
<head></head>
<body>
<table class='infobox vcard' style="font-size: 95%" id="sortable_table_id_0">
<tbody>
<tr>
<td><a href="/wiki/Germania_(airline)" title="Germania (airline)">Germania</a></td>
<td><b>Seasonal</b>: Munich, Nuremberg [begins 31 July]
<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span>[</span>5<span>]</span></a></sup>
</td>
</tr>
</tbody>
</table>
</body>
</html>
到目前为止,我想出的最好的是:
xpath("//table[@class='infobox vcard']/descendant::*[not(@class='reference') and text()]")
但是,当我遍历数组时,文本的顺序是不正确的。例如,最后一项()将显示为:
慕尼黑,纽伦堡[7月31日开始] 季节性的5 []
有什么想法吗?
非常感谢, 史蒂夫
答案 0 :(得分:0)
我对这些结果感到惊讶。从技术上讲,XPath 1.0返回一个节点集,并且一个集没有定义的顺序,因此无法保证结果的顺序。 (XSLT总是以文档顺序处理XPath结果,但这并不意味着XPath必须按文档顺序提供它们。)在实践中(这在XPath 2.0中变得明确),人们期望结果将在文档中返回订单,这不是你得到的。尝试使用不同的XPath处理器,最好是声称符合XPath 2.0的处理器,这在这一点上是严格的。
答案 1 :(得分:0)
使用xpath("//table[@class='infobox vcard']//text()[not(@class='reference')]")
获取以下数组:
['\n ',
'\n ',
'\n ',
'Germania',
'\n ',
'Seasonal',
': Munich, Nuremberg [begins 31 July]\n ',
'[',
'5',
']',
'\n ',
'\n ',
'\n ',
'\n ']
这似乎保留了秩序。