2012-10-24 81 views
1

假設我有XML文件是這樣的:安卓:解析XML並插入到SQLite數據庫

<?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的條件。

我該如何解決這個問題? 所有的答案將是appreciated..thanks

回答

2

解析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文件的名稱爲小寫)

+0

感謝你這麼多的回覆...它的工作原理井,但它爲什麼只插入3或4行,每行我運行的時間應用程序。它不會插入所有數據,直到到達xml文件的末尾。 –

+0

正如我所說我沒有檢查XML的格式,所以問題可能在那裏。這段代碼假設將會有一個P標籤,然後在多個內容標籤內以及這些標籤的內部,這些標籤,日期和placeOfBirth;確保你有所有的標籤(打開和關閉),並且所有的元素都被正確的嵌套。然後,如果你需要它,你可以添加一些代碼來解析錯誤(或者至少讓你知道發生了什麼)。我只能使用你給我們的東西,而對於那個小測試場景,它正在工作...... – ZhDev

+0

再次感謝,我剛剛發現,我的XML不是很好的形式....我會嘗試你的指令。 ...非常感謝您的好意 –