在Android的SQLite数据库中插入远程(互联网)xml文件

问题描述:

这是我的大问题。基于我已经搜索的选项,一个是解析我需要的数据然后存储在sqlite中,另一个是通过将整个xml文件作为文本存储在sqlite中。我实际上不知道从哪里开始,但我认为第二种选择对我来说更可取。任何人都可以指出我该如何做到这一点?或者,如果有更多关于我的问题的建议,请点击此处..在Android的SQLite数据库中插入远程(互联网)xml文件

任何回复将不胜感激..谢谢!

+1

取决于你的条件,你可以使用任何选项。但通常情况下,第一种选择是更好地解析数据,然后将数据存储在db – Sumant

+0

我到底该如何做?你能指出我在这个教程吗?我只是新的SQLite数据库。 哦,谢谢你的回复。 – androidbeginner

对不起,但我的英语不是很好。

我会选择第二个选项。您可以读取文件的XML与XmlPullParser和XmlPullParserFactory:

XmlPullParser xmlPullParser; 
    String output; 
    XmlPullParserFactory fabrica = null; 

    File archivoXml = new File(Environment.getExternalStorageDirectory() + servicioXML); //servicioXML is a xml path 
    FileInputStream fisArchivo = null; 
    XmlPullParser analizador = null; 
    int tipoEvento = 0; 

    try { 
     fisArchivo = new FileInputStream(archivoXml); 
     fabrica = XmlPullParserFactory.newInstance(); 
     fabrica.setNamespaceAware(true); 
     analizador = fabrica.newPullParser(); 
     analizador.setInput(new InputStreamReader(fisArchivo)); 
     fabrica = XmlPullParserFactory.newInstance(); 
     xmlPullParser = fabrica.newPullParser(); 
     xmlPullParser.setInput(fisArchivo, "UTF-8"); 
     tipoEvento = xmlPullParser.getEventType(); 

    } catch (FileNotFoundException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 

    } catch (XmlPullParserException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    while (tipoEvento != XmlPullParser.END_DOCUMENT) { 
     analizarEvento(tipoEvento); 
     try { 
      tipoEvento = xmlPullParser.next(); 
     } catch (XmlPullParserException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 


private void analizarEvento(int evento){ 
    switch (evento) { 
    case XmlPullParser.START_DOCUMENT: 
     break; 

    case XmlPullParser.END_DOCUMENT:  
     break; 

    case XmlPullParser.START_TAG: 
     break; 

    case XmlPullParser.END_TAG: 
     break; 

    case XmlPullParser.TEXT: 
     output = xmlPullParser.getText(); 
     AdapterBBDD.setDBField(output); //add the xml data to the database 
     break; 
    } 

更多信息:XmlPullParser in Android

+0

也许你有DOM解析器中的例子?因为我几乎所有的活动都使用DOM ..如果你有一个,请在这里发表你的答案..谢谢! – androidbeginner

,如果你在一次数据库和存储分析数据更好。 U只能查询所需的数据并显示。

SAXParserFactory spf = SAXParserFactory.newInstance(); 
        SAXParser sp = spf.newSAXParser(); 
        XMLReader xr = sp.getXMLReader(); 
        /** Create handler to handle XML Tags (extends DefaultHandler) */ 
        XMLHandler dbXMLHandler = new XMLHandler(); 
        xr.setContentHandler(dbXMLHandler); 
        InputStream is = new ByteArrayInputStream(
          xmlData.getBytes("UTF-8")); 
        xr.parse(new InputSource(is)); 

    phoneList = XMLHandler.phoneList; 
       for(int id = 0; id < phoneList.getID().size();id++) 
       { 
        database.open(); 
        database.insertupdateintoPhonebook(phoneList.getUserName().get(id), 
          phoneList.getUserName().get(id) 
            .get(id), phoneList.getDOB().get(id) 

        database.close(); 
} 

和DBXMLHAndler.java如下

import org.xml.sax.Attributes; 
import org.xml.sax.SAXException; 
import org.xml.sax.helpers.DefaultHandler; 



public class XMLHandler extends DefaultHandler{ 
Boolean currentElement = false; 
String currentValue = null; 
public static Phonelist phoneList = null; 

public static Phonelist getPhoneList() { 
    return phoneList; 
} 

public static void setPhonelist(Phonelist phoneList) { 
    DBXMLHandler.phoneList = phoneList; 
} 
@Override 
public void startElement(String uri, String localName, String qName, 
     Attributes attributes) throws SAXException { 

    currentElement = true; 

    if (localName.equals("NewDataSet")) 
    { 
     phoneList = new Phonelist(); 
    } 

} 

/** Called when tag closing (ex:- <name>AndroidPeople</name> 
* -- </name>)*/ 
@Override 
public void endElement(String uri, String localName, String qName) 
     throws SAXException { 

    currentElement = false; 

    /** set value */ 
    if (localName.equalsIgnoreCase("Id")) 
     phoneList.setID(currentValue); 
    else if (localName.equalsIgnoreCase("Username")) 
     phoneList.setUserName(currentValue);  
    else if (localName.equalsIgnoreCase("Dob")) 
     phoneList.setDOB(currentValue); 

} 

/** Called to get tag characters (ex:- <name>AndroidPeople</name> 
* -- to get AndroidPeople Character) */ 
@Override 
public void characters(char[] ch, int start, int length) 
     throws SAXException { 

    if (currentElement) { 
     currentValue = new String(ch, start, length); 
     currentElement = false; 
    } 

} 

}

+0

也许你在DOM解析器中有例子吗?因为我几乎所有的活动都使用DOM ..如果你有一个,请在这里发表你的答案..谢谢! – androidbeginner