1

私はプログラミングに慣れていないので、以下のパラグラフで間違っている場合はまず修正してください。

Android で使用する主な xml パーサーは、Sax、Dom、および XmlPullParser の 3 つです。その最後のオプションは、外部リソースとして存在します。Androidの「コア」であるため、より高速に動作しますが、機能は制限されています

OK、これが私の質問です。以下のリンクで提供されているコードをわずかに変更しました

http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html

私は次のことをしました:

import java.io.IOException;
import java.io.StringReader; 
import org.xmlpull.v1.XmlPullParser; 
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory; 

public class xmlPParser
{   

    public String texte;
    public xmlPParser (String arg)         
      throws XmlPullParserException, IOException     
    {
         XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
         factory.setNamespaceAware(true);
         XmlPullParser xpp = factory.newPullParser();
         xpp.setInput( new StringReader ( arg ) );
         int eventType = xpp.getEventType();



         while (eventType != XmlPullParser.END_DOCUMENT)
       {
            //if(eventType == XmlPullParser.START_DOCUMENT) { System.out.println("Start document");} 
       // else if(eventType == XmlPullParser.START_TAG) { System.out.println("Start tag "+xpp.getName()); } 
        //else if(eventType == XmlPullParser.END_TAG) {  System.out.println("End tag "+xpp.getName()); }
        if(eventType == XmlPullParser.TEXT){ texte = xpp.getText();  }    //{ System.out.println("Text "+xpp.getText());}          

        eventType = xpp.next();
            }         

         //System.out.println("End document");
         } 

        public String getTexte()
        {
            String returnTexte = texte;
            return returnTexte;
        }

} 

別の Java ファイルでは、次の方法でパーサーを呼び出すことができます。

public xmlPParser myxpp;

...

myxpp = new xmlPParser("<foo>Hi five !!</foo>");

その最後の行で: 文字列を渡す代わりに、パーサーにファイルに移動するように依頼できるようにしたいと考えています。どうすればいいですか?この投稿を利用する方法がわかりません getResources().getXml() は、現在使用しているかどうかわからない Android pullParser を使用していると想定していますか?

4

1 に答える 1

3

XmlPullParser は実際にはパーサーではなく、「プル」パーサーと呼ばれるタイプのパーサーへのインターフェイスです。

関数 getResources().getXml() は、XML リソースを「解析」するための XmlPullParser の実装を返します。これは実際の XML パーサーではありません。実際、元の XML ファイルはビルド時に解析されてからアプリに組み込まれます。この「XML パーサー」が行っていることは、API を呼び出したときに事前に消化された XML 構造を返すことだけです。 . これは Android で利用できる最速の「XML」パーサーですが (実際には何も解析しないため)、アプリのビルドの一部として XML ドキュメントをコンパイルする必要があります。

XmlPullParserFactory.newInstance() から取得する XmlPullParser の他の実装は「限定的」ではありません。この実装はフル機能を備えており、指定した生の XML ドキュメントを解析できます。

少なくとも 1 回は (今もそうかどうかは不明)、SAX パーサーと XmlPullParserFactory.newInstance() によって返されるパーサーの両方が、実際には同じ基本実装である expat で構築されています。expat パーサーは「プッシュ」パーサー (SAX と同じモデル) であるため、最も効率的な使用方法は SAX API を使用することです。XmlPullParser バージョンは、基礎となるプッシュ セマンティクスをプル インターフェイスに変換する必要があるため、SAX からのオーバーヘッドがいくらかあります。

役立つ場合 -- プッシュとは、解析されたデータをプッシュすることを意味し (各タグとその他のドキュメント要素を提供する実装するコールバック)、プルとはパーサーを呼び出して各要素を取得することを意味します。

于 2011-05-21T05:23:48.823 に答える