Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android:解析XML并插入sqlite数据库_Android_Sqlite - Fatal编程技术网

android:解析XML并插入sqlite数据库

android:解析XML并插入sqlite数据库,android,sqlite,Android,Sqlite,假设我有这样的XML文件: <?xml version="1.0"?> <P> <Content> <id>1016576</id> <date>20.08.2012</date> <placeOfBirth>KUALA LUMPUR</placeOfBirth> </Content> <Conten

假设我有这样的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>
它不会显示任何错误日志,但不会在每个START_标记处测试条件

我如何解决这个问题。。。
如果您不小心的话,解析XML会变得非常糟糕,特别是对于这个解析器;您可以尝试其他一些更简单的API或更清晰的层次结构(即)。您还应该看看Android开发者网站上的示例,它非常简单()

说了这么多,我帮你修好了。这应该行得通(至少对我来说是这样)。不过要小心,它在检查格式错误的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文件名更改为小写;)

非常感谢您的回复…它工作得很好,但为什么每次我运行应用程序时只插入3或4行。直到数据到达xml文件的末尾,它才插入所有数据。正如我所说,我没有检查xml的格式是否良好,所以问题可能就在那里。这段代码假设将有一个P标记,然后在几个内容标记中,在这些内容标记中有id、date和placeOfBirth;确保您拥有所有标记(开始和结束),并且所有元素都已正确嵌套。然后,如果您需要它,您可以添加一些代码来修复解析过程中的错误(或者至少向您展示它们,以便您知道发生了什么)。我只能使用您提供的内容,对于那个小测试场景,它正在工作…再次感谢,我刚刚发现,我的xml格式不好…我将尝试您的说明…非常感谢您的帮助kindness@ZhDev我正在努力实现这一目标,但我不知道如何开始,我已经解析了一个xml,但是要插入SQLite数据库,我不知道如何做?因为我想在那里添加数据,但是我手动声明的一些数据和其他数据会给用户吗?我们可以讨论一下吗?
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;
    }