2011-06-23 12 views
0

私は3つの質問を持っています// table [8]/td [1]/span [2]/text()| // table [10]/td [1]/span [2]/text() "?のXPathパフォーマンス&バージョンは

.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)が大幅に拡張されていますが、新しい機能の恩恵を受ける場合を除き、スイッチする必要はありません。

どちらが速いかについては、2番目のケースでノード検索を繰り返すため、最初の方が高速になると思います。最初のケースは読みやすく、一般的には読みやすいものと一緒に行きたいと思っています。

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