android:解析XML并插入sqlite数据库
假设我有这样的XML文件: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 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;
}