1

次のようなファイル XML があるとします。

<?xml version="1.0"?>
<P>
    <Content>
        <id>1016576</id>
        <date>20.08.2012</date>
        <placeOfBirth>KUALA LUMPUR</placeOfBirth>
    </Content>
    <Content>
        <id>1016620</id>
        <date>20.08.2012</date>
        <placeOfBirth>SINGAPORE</placeOfBirth>
    </Content>
    <Content>
        <id>1020907</id>
        <date>20.08.2012</date>
        <placeOfBirth>SINGAPORE</placeOfBirth>
    </Content>
</P>

すべてのテキストを解析し、_id、date、および placeOfBirth 列を持つデータベース テーブルに挿入したいと考えています。私はこれを試しました:

    Activity activity1 = this;
    String str="";
    Resources res = activity1.getResources();
    XmlResourceParser xmlPharser = res.getXml(R.xml.fileXML);
    String id,date,pob;
//database
        final databaseHelper myDbHelper = new databaseHelper(this);
        myDbHelper.open();
//insert into table while parsing xml
        try {
            xmlPharser.next();
            int eventType = xmlPharser.getEventType();
            String event = ""+eventType;
            Log.d("Event", event);
            while (eventType != XmlPullParser.END_DOCUMENT)
            {

        if(eventType == XmlPullParser.START_TAG )
            {
               if( xmlPharser.getName() == "id")
               {
                    id=xmlPharser.getText();
               }
               else if ( xmlPharser.getName() == "date" )
               {
                    date = xmlPharser.getText();
               }
               else if ( xmlPharser.getName() == "placeOfBirth" )
               {
                    pob = xmlPharser.getText();
               }
               myDbHelper.insertData(id,date,pob);
               myDbHelper.close();
            }
            eventType = xmlPharser.next();
        }
  } catch (XmlPullParserException e) {
        e.printStackTrace();
  } catch (IOException e) {
        e.printStackTrace();
  }

エラー LogCat は表示されませんが、各 START_TAG で条件をテストしません。

この問題を解決するにはどうすればよいですか...すべての回答をいただければ幸いです..ありがとう

4

1 に答える 1

2

XML の解析は、特にこのパーサーを使用する場合、注意しないと非常に厄介なものになる可能性があります。より単純な API または階層を通過するより明確な方法 (つまり、JDOM ) を使用して、他のものを試すことができます。また、Android 開発者サイトの例も参照してください。非常に簡単です ( XML データの解析)。

言われたことはすべて、私はあなたのためにそれを修正しました。これはうまくいくはずです(少なくとも私にとってはそうです)。ただし、不正な XML やデータベースに関するエラー チェックは行われないことに注意してください。

import java.io.IOException;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import android.app.Activity;
import android.content.res.XmlResourceParser;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        XmlResourceParser parser = getResources().getXml(R.xml.filexml);

        final databaseHelper myDbHelper = null;

        try {
            myDbHelper = new databaseHelper(this);
            myDbHelper.open();
            while (parser.next() != XmlPullParser.END_TAG) {
                if (parser.getEventType() != XmlPullParser.START_TAG) {
                    continue;
                }
                String name = parser.getName();
                if (name.equals("Content")) {
                    String id = null, date = null, pob = null;
                    while (parser.next() != XmlPullParser.END_TAG) {
                        if (parser.getEventType() != XmlPullParser.START_TAG) {
                            continue;
                        }
                        name = parser.getName();
                        if (name.equals("id")) {
                            id = readText(parser);
                        } else if (name.equals("date")) {
                            date = readText(parser);
                        } else if (name.equals("placeOfBirth")) {
                            pob = readText(parser);
                        }
                    }
                    myDbHelper.insertData(id,date,pob);
                }
            }
        } catch (XmlPullParserException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            if (myDbHelper != null) {
                myDbHelper.close();
            }
        }
    }

    private String readText(XmlPullParser parser) throws IOException,
            XmlPullParserException {
        String result = "";
        if (parser.next() == XmlPullParser.TEXT) {
            result = parser.getText();
            parser.nextTag();
        }
        return result;
    }

もう 1 つコメントします。xml ファイル名を小文字に変更してください ;)

于 2012-10-24T22:39:29.760 に答える