21

SAXパーサーとXMLPullパーサーの動作の違いを理解しています。実際、ここにはかなり良い説明があります:

http://www.firstobject.com/xml-reader-sax-vs-xml-pull-parser.htm この記事は少し.NET中心ですが、概念が適用されます。

プルパーサーの方が操作しやすいという著者の意見には同意しますが、どのタイプのパーサーがどの状況で優れているかについてはかなり混乱しています。誰かが何か光を当てて、私にもう少し読書を教えてくれるなら、私はそれをいただければ幸いです。

ありがとうございました。

4

7 に答える 7

18

私は彼らが両方とも吸うことがわかります。(そして私は提案するより良い解決策を持っています)

SimpleアノテーションベースのXMLライブラリを使用する必要があります。私はそれが大好きで、すべてのプロジェクトに使用しています。チュートリアルを読むと、必要なすべてのことをはるかに高速に、より少ないコードで実行できることがわかると思います。(したがって、バグが発生しにくくなります)内部的には、ライブラリは、手間のかかる作業を行うように要求していたパーサーを使用します。

必要に応じて、Androidプロジェクトに含めることに関する私のブログ投稿を読むことができます。(Androidのすべてのバージョンで少なくとも1.5から動作します。これは、基本的にすべての人にとって意味があります)

于 2011-04-28T00:52:52.567 に答える
11

それは状況に完全に依存します。たとえば、xmlファイルが本当に大きい場合はDOMパーサーを選択できません。最初にファイルをメモリに取り込み、次に解析され、サイズnのファイルを解析することがわかりました。 7nのメモリスペースが必要です。この場合、SAXパーサーを選択する必要があり、メモリの消費量が少なくなります。

2番目のケースは、ファイルがそれほど大きくない場合です。この場合、XMLプルパーサーを使用できます。これは、xmlを完全に制御できるため、SAXでは不可能な場合は解析サイクルをスキップできます。したがって、探しているタグがファイルの最初のタグである場合、なぜファイル全体を検索するのでしょうか。

私の知る限り、小さなファイルでの速度のみを考慮する場合はXMLプルパーサーを使用し、ファイルが大きくてすべてを解析する場合はSAXを使用します。

于 2011-07-14T13:09:24.250 に答える
3

両方のパーサーは、基本的に同じメモリ/時間です。唯一のことは、プルパーサーを使用すると、startelementやendelementなどのイベントを引き出して、必要なイベントだけに注意を払うことができるということです。

android saxパーサーと同様に、選択の余地はありません。必要な場所にコードを配置するだけですが、すべてのイベントを含める必要があります。

ここに、さらに読むために参照できるリンクがあります。

于 2011-04-27T17:43:11.660 に答える
2

SAXモデルは、特定の状況で作業しやすいと思います。カスタムデータ構造を使用して、ドキュメント全体(または少なくともその大部分)の独自のメモリ内表現を構築する場合です。(データ構造にこだわらない場合は、DOMパーサーがすでにこれを行っています。)

于 2011-04-27T17:40:22.797 に答える
2

PullとSaxは、どちらもDOMよりも高速でメモリ効率の高い低レベルのストリーミングアプローチであるという点で似ていますが、PullにはSAXに比べていくつかの利点があります。

パーサーの状態を維持する必要がないため、プルはSAXよりも実装が簡単です(追加の変数を使用して、パーサーが現在XMLツリーのどの場所にあるかを知ることができます)。プルパーサーコードのネストされたループは、ドキュメントのXML階層とほぼ一致するため、プルパーサーコードはSAXパーサーコードよりも読みやすいと思います。

プルパーサーコードを使用すると、解析したくないブロック全体をスキップできるため、すべてのノードの主要な情報を常に抽出するSAXよりも効率的です。プルパーサーを使用すると、必要な情報を取得した場合にいつでも解析を停止できます。これは、SAXでは不可能です。

また、プルパーサーを使用してSAXパーサーを実装することもできます。逆はできません。

これらすべての理由から、プルパーサーはすべての状況でSAXより優れていると思いますが、SAXのように適切に実装するのは簡単ではなく、注意する必要があります。プルとSAXの低レベルの速度の利点が不要で、XMLがクリーンな場合は、Simpleなどの高レベルの解析ライブラリをいつでも使用してハードワークを実行できます。

于 2014-05-03T13:15:05.983 に答える
0

XMLPullParserではなくSAXを使用すると、より適切で効率的な出力が見つかりました...私のシナリオは、XMLタグの下の属性を解析することです。これを簡単に実行して、データベースにスムーズに挿入できます...状況によって異なります。 XMLファイルに書き込む必要があります。DOMパーサーが好きです。

public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        currentElement = true;
        db = new DatabaseHelper(thecontext);
        if (qName.equals("Asa.Amms.Data.Entity.User")) {
            int length = attributes.getLength();
            for (int i = 0; i < length; i++) {
                String name = attributes.getQName(i);
                if (name.equals("Id")) {
                    id = Integer.parseInt(attributes.getValue(i));
                }
                if (name.equals("Login")) {
                    LoginID = attributes.getValue(i).toString();
                }
                if (name.equals("Name")) {
                    Name = attributes.getValue(i).toString();
                }
                if (name.equals("Password")) {
                    Password = attributes.getValue(i).toString();
                }
                if (name.equals("ProgramOfficerId")) {
                    user_ProgramOfficerId = Integer.parseInt(attributes.getValue(i).toString());
                }
            }
            Log.i("Baal dhukbe", id + LoginID + Name + Password);

            db.insertUser(id, LoginID, Name, Password, user_ProgramOfficerId);
        }
}
于 2015-06-14T05:49:09.593 に答える
-2

XmlPullParserを使用することをお勧めします。Saxパーサーは私のテストでフィードからタグを取得しませんでした。xmlpullparserはそれを簡単に実行しました=)またあなたの好みにも依存します

于 2011-05-04T20:18:09.290 に答える