2009-03-27 7 views
20

私はxml文字列を解析し、特定のテキストノードや属性値などの値を見つけ出す必要があります。 私はこれをjavascriptで行い、同じものに対してDOMParserクラスを使用していました。その後、DOMが多くのメモリを使い、SAXがより良い選択肢であると私は知らされました。DOMとSAXに比べてXPathはずっと効率的ですか?

最近、XPathもノードを見つける簡単な方法を提供することがわかりました。

しかし、これら3つのうちどれがXMLを解析する最も効率的な方法であるかはわかりません。 親切にお手伝いします....

答えて

27

SAXはトップダウン・パーサーであり、XML文書へのシリアル・アクセスを許可し、読み取り専用アクセスに適しています。一方、DOMはXML文書全体をツリーに読み込み、そのXMLツリー内のデータを変更、追加、削除するときに非常に効率的です。 XPathは、XML文書からいくつかの値だけが必要なときに、それらを見つける場所(データのパス、/ root/item/challange/text)を知っているときに便利です。

SAX:フレキシブル/パフォーマンス、あなたのデータ

XPathの仕事をするより多くの方法できます:あなただけ効率的に時間をドキュメントを反復処理する際の時間が効率的で、各反復

DOMのための単一のパスを提供しますいくつかの値を読み取る必要があります

+0

組み込みのxpath実装でvtd-xmlについて忘れないでください。 –

0

特定のテキストノードの値を見つける必要がある場合は、XPath。 DOMが大量のメモリを占有するのは、XML全体を読み込んで文書のツリーを形成するためです。 SAXはイベントベースです。したがって、あなたが記述したことに基づいて、XPathはあなたのシナリオに最も適しています。

10

研究プロトタイプstreaming XPathを使用していない限り、XPathエンジンはすべてをメモリにロードしている可能性が高いため、DOMと同様の特性を持ちます。だからあなたの「効率」の定義によります。確かに使いやすく、XPathの実装はより効率的に変わる可能性がありますが、DOMは常にクライアントマシン上でドキュメント全体を表現しますが、SAXはXPathよりもプログラミングが面倒です。

+0

私は、XPathが何らかの方法で文書を解析しなければならないので、他の回答にはあなたの言及が言及されていないことが奇妙に感じられます。DOM、SAXおよびXPathは、ドキュメントにアクセスするための異なるAPIです。 DOMとSAXだけがドキュメントのパーサです。一部の#CがわからないXPath用のパーサーを実行していない場合 – 13ren

+0

BTW:あなたのリンクされたXSQは、下に解析するためにSAXを使用します - 特定のXPathパーサーはありません。 – 13ren

+0

はい、オブジェクトモデルではなくストリーミングパーサーの上のレイヤーです。 –

1

This document from MSDNは、XML処理の最適化に関する豊富な情報を提供します

特に、XPathDocumentクラスは、(DOMベースの)XmlDocumentクラスを使用するよりも効率的にXPath式を評価するように設計されています。その理由は、XPathDocumentはXMLドキュメントの読み取り専用表現であり、DOM実装はドキュメントの変更もカバーするからです。

DOMを使用することは、それほど重要ではない重要な欠点であり、通常、理解して維持することが難しい複雑なスパゲッティ様のコードになります。

1

たちはXMLDogへのXPathのセットを与え、いくつかのXMLドキュメントを盗聴するように依頼http://code.google.com/p/jlibs/wiki/XMLDog

を参照してください。 SAXを使用し、ドキュメントを1回パスすると、指定されたすべてのXPathが と評価されます。

関連する問題