0

これは私の大きな問題です。私がグーグルで検索したオプションに基づいて、1つは必要なデータを解析してsqliteに保存し、もう1つはxmlファイル全体をテキストとしてsqliteに保存することです。実際にはどこから始めればよいかわかりませんが、2番目のオプションが望ましいと思います..誰かが私にこれを行う方法を教えてもらえますか?または、ここで私の問題に関する提案が他にある場合..

どんな返信でも大歓迎です..ありがとう!

4

2 に答える 2

0

申し訳ありませんが、私の英語はあまり上手ではありません。

私は2番目のオプションを選択します。XmlPullParser と XmlPullParserFactory を使用してファイル XML を読み取ることができます。

    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;  
    }  

詳細: Android の XmlPullParser

于 2012-05-21T10:12:15.543 に答える
0

データを一度解析してデータベースに保存するとよいでしょう。必要なデータのみを照会して表示できます。

 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;
    }

}

}

于 2012-05-21T10:54:25.830 に答える