gpt4 book ai didi

机器人 : parsing XML and insert to sqlite database

转载 作者:行者123 更新时间:2023-11-29 21:56:41 25 4
gpt4 key购买 nike

假设我有这样的文件 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、日期和 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 的条件。

我该如何解决这个问题...所有答案将不胜感激..谢谢

最佳答案

如果你不小心,解析 XML 会变得非常糟糕,特别是使用这个解析器;您可以尝试使用更简单的 API 或更清晰的层次结构方式(即 JDOM )。您还应该看看 Android 开发者网站上的示例,它非常简单明了 (Parsing XML Data)。

综上所述,我已经为您修复了。这应该可行(至少对我有用)。不过要小心,它不会对格式错误的 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文件名改成小写;)

关于机器人 : parsing XML and insert to sqlite database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13057942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com