2011-06-23 41 views
0

我有3个问题:的XPath性能&版本

1)是XPath字符串“//表[位置()= 8或位置()= 10]/TD [1] /跨度[2] /文本()“快于XPath字符串”// table [8]/td [1]/span [2]/text()| // table [10]/td [1]/span [2]/text() “?

我在.NET CSharp和HTMLAgilityPack中使用XPath。

2)如何确定我使用的XPath版本。如果我使用XPath 1.0,如何升级到XPath 2.0?

3)在XPath 2.0中是否存在性能优化和改进,或者只是新特性和新语法?

回答

2

XPath 2.0在XPath 1.0(read here for a summary)上的显着扩展,尽管除非您受益于新功能,否则不需要切换。

至于哪一个会更快,我相信第一个会更快,因为你在第二种情况下重复节点搜索。第一种情况也更具可读性,一般而言,您希望使用可读性更强的文档。

1

至于表现问题,恐怕我不知道。它取决于您正在使用的特定XPath处理器中的优化器。如果它对你很重要,那么测量它。如果测量不够重要,那么担心并不重要。

正如我在前面的回复中提到的,//table[8]对我来说是错误的。我认为你更想要(//table)[8]。 (两者都是有效的XPath表达式,但它们产生不同的答案)。

您可以假设一个处理器是XPath 1.0,除非它另有说明 - 如果它支持2.0,他们会希望您知道。但是,您可以轻松测试,例如通过查看//a except //b时发生的情况。

在相同的查询中,XPath 2.0处理器的速度应该比1.0处理器的速度更快,这并没有内在原因。事实上,它可能会慢一点,因为它需要做更仔细的类型检查。另一方面,它可能要快得多,因为很多1.0处理器很快就被破解掉了,从未升级过。但是,2.0中的功能有很大的改进,例如正则表达式支持。

+0

迈克尔,我想要所有表[8],所以我正确使用“//”没有括号。我如何开关/升级到XPath 2.0?要检查试图运行函数的XPath的版本是我做的,而且似乎我的PC使用XPath 1.0。但我想知道是否有一种有效的方法来检查版本? – user569008

+0

我不相信你不能回答我的问题#2 – user569008