XPath OR,替代方案

时间:2011-06-21 19:16:23

标签: c# xpath html-agility-pack

我使用CSharp,XPath和HTMLAgility Pack。我使用XPath字符串,如:

"//table[3]/td[1]/span[2]/text() | //table[6]/td[1]/span[2]/text()"
"//table[8]/td[1]/span[2]/text() | //table[10]/td[1]/span[2]/text()"

区别仅在于表格编号。是否可以使用其他XPath函数来替换XPath或|

我实际做了什么:使用第一个XPath字符串(我有表号3和6),我提取一个值。使用第二个XPath字符串(我的表号为8和10),我提取另一个值。

关于性能的其他问题 - XPath字符串//table[8]/td[1]/span[2]/text()比带有OR //table[8]/td[1]/span[2]/text() | //table[10]/td[1]/span[2]/text()的XPath字符串更快吗?我问这个是因为我有许多XPath字符串用于许多值,如果存在差异,这实际上意味着我需要尝试别的东西。我现在无法进行测量,这就是为什么我问你这个问题来分享你的经验。

1 个答案:

答案 0 :(得分:3)

首先,//table[6]看起来很奇怪。你确定你的意思不是(//table)[6]吗? (第一个选择每个表是其父级的第6个子级;第二个选择文档中的第六个表。)我将假设后者。

在XPath 2.0中,您可以编写

(//table)[position()=(3,6,8,10)]/td[1]/span[2]/text()

1.0必须是

(//table)[position()=3 or position()=6 or position()=8 or position()=10]
    /td[1]/span[2]/text()

或者(在任何一个版本中)你都可以写

((//table)[3] | (//table)[6] | (//table)[8] | (//table)[10])/td[1]/span[2]/text()

如果不了解您正在使用的XPath实现,则无法回答有关性能的问题。