24

xml文字列を解析し、特定のテキストノードの値、属性値などを見つける必要があります。これはjavascriptで実行しており、同じようにDOMParserクラスを使用していました。後で、DOMは多くのメモリを消費し、SAXがより良いオプションであると知らされました。

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

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

4

5 に答える 5

32

SAX はトップダウン パーサーであり、XML ドキュメントへのシリアル アクセスを可能にし、読み取り専用アクセスに適しています。一方、DOM はより堅牢です。XML ドキュメント全体をツリーに読み込み、その XML ツリー内のデータを変更、追加、削除する場合に非常に効率的です。XPath は、XML ドキュメントからいくつかの値のみが必要であり、それらの値を見つける場所がわかっている (データのパス /root/item/challange/text がわかっている) 場合に役立ちます。

SAX: ドキュメントを反復処理する際の時間効率が高く、反復ごとに 1 つのパスが提供されます

DOM: 柔軟でパフォーマンスが高く、データを操作する方法が増えます

XPath: いくつかの値を読み取るだけでよい場合の時間効率

于 2009-03-27T09:57:44.133 に答える
10

ストリーミングXPathのリサーチプロトタイプを使用していない限り、XPathエンジンがすべてをメモリにロードしている可能性が非常に高いため、DOMと同様の特性を備えています。したがって、それはむしろ「効率」の定義に依存します。確かに使いやすく、XPathの実装はより効率的になるように変更される可能性がありますが、DOMは常にクライアントマシン上でドキュメント全体の表現を持ち、SAXは常にXPathよりもプログラミングがはるかに面倒です。

于 2009-03-27T10:42:02.157 に答える
1

MSDNのこのドキュメントは、XML処理の最適化に関する豊富な情報を提供します

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

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

于 2009-03-27T13:45:32.713 に答える
1

http://code.google.com/p/jlibs/wiki/XMLDogを参照してください

XMLDog に一連の xpath を渡し、XML ドキュメントのスニッフィングを依頼します。SAX を使用し、ドキュメントを 1 回通過するだけで、指定されたすべての XPath を評価します。

于 2010-01-23T07:04:25.677 に答える
0

特定のテキスト ノードの値のみを検索する必要がある場合は、XPath. DOM が大量のメモリを消費する理由は、DOM が XML 全体を読み取り、ドキュメントのツリーを形成するためです。SAX はイベントベースです。したがって、説明した内容に基づいて、XPath がシナリオに最適です。

于 2009-03-27T09:53:09.510 に答える