我使用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字符串用于许多值,如果存在差异,这实际上意味着我需要尝试别的东西。我现在无法进行测量,这就是为什么我问你这个问题来分享你的经验。
答案 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实现,则无法回答有关性能的问题。