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;
    }

再评论,将 xml 文件名更改为小写;)

于 2012-10-24T22:39:29.760 回答