2010-04-28 5 views

Antwort

19

von XML in Ihrer App zu lesen, einen Ordner in Ihrem res Ordner in Ihrem Projekt mit dem Namen „xml“ (Kleinschreibung) erstellen. Speichern Sie Ihr XML in diesem neu erstellten Ordner. Um die XML-Daten aus Ihren Ressourcen zu laden,

XmlResourceParser myxml = mContext.getResources().getXml(R.xml.MyXml);//MyXml.xml is name of our xml in newly created xml folder, mContext is the current context 
// Alternatively use: XmlResourceParser myxml = getContext().getResources().getXml(R.xml.MyXml); 

myxml.next();//Get next parse event 
int eventType = myxml.getEventType(); //Get current xml event i.e., START_DOCUMENT etc. 

Sie können dann Knoten starten zu verarbeiten, Attribute usw. und Text enthalten ist innerhalb von dem Ereignistyp Gehäuse, einmal verarbeitet Anruf myxml.next() das nächste Ereignis zu erhalten, das heißt ,

String NodeValue; 
    while (eventType != XmlPullParser.END_DOCUMENT) //Keep going until end of xml document 
    { 
     if(eventType == XmlPullParser.START_DOCUMENT) 
     {  
      //Start of XML, can check this with myxml.getName() in Log, see if your xml has read successfully 
     }  
     else if(eventType == XmlPullParser.START_TAG) 
     {  
      NodeValue = myxml.getName();//Start of a Node 
      if (NodeValue.equalsIgnoreCase("FirstNodeNameType")) 
      { 
        // use myxml.getAttributeValue(x); where x is the number 
        // of the attribute whose data you want to use for this node 

      } 

      if (NodeValue.equalsIgnoreCase("SecondNodeNameType")) 
      { 
        // use myxml.getAttributeValue(x); where x is the number 
        // of the attribute whose data you want to use for this node 

      } 
      //etc for each node name 
     } 
     else if(eventType == XmlPullParser.END_TAG) 
     {  
      //End of document 
     }  
     else if(eventType == XmlPullParser.TEXT) 
     {  
      //Any XML text 
     } 

     eventType = myxml.next(); //Get next event from xml parser 
    } 
6
 
package com.xml; 
import org.xml.sax.Attributes; 
import org.xml.sax.SAXException; 
import org.xml.sax.helpers.DefaultHandler; 
import android.util.Log; 
import android.widget.Toast; 

public class FeedHandler extends DefaultHandler { 

    StringBuilder sb = null; 
    String ret = ""; 
    boolean bStore = false; 
    int howMany = 0; 

    FeedHandler() { } 

    String getResults() 
    { 
     return "XML parsed data.\nThere are [" + howMany + "] status updates\n\n" + ret; 
    } 
    @Override 
    public void startDocument() throws SAXException 
    { 
     // initialize "list" 
    } 

    @Override 
    public void endDocument() throws SAXException 
    { 

    } 

    @Override 
    public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { 

     try { 
      if (localName.equals("status")) 
      { 
       this.sb = new StringBuilder(""); 
       bStore = true; 
      } 
      if (localName.equals("user")) 
      { 
       bStore = false; 
      } 
      if (localName.equals("text")) 
      { 
       this.sb = new StringBuilder(""); 
       Log.i("sb ", sb+""); 

      } 
      if (localName.equals("created_at")) 
      { 
       this.sb = new StringBuilder(""); 
      } 
     } catch (Exception e) 
     { 

      Log.d("error in startElement", e.getStackTrace().toString()); 
     } 
    } 
    @Override 

    public void endElement(String namespaceURI, String localName, String qName) throws SAXException 
    { 

     if (bStore) 
     { 
      if (localName.equals("created_at")) 
      { 
       ret += "Date: " + sb.toString() + "\n"; 
       sb = new StringBuilder(""); 
       return; 

      } 

      if (localName.equals("user")) 
      { 
       bStore = true; 
      } 

      if (localName.equals("text")) 
      { 

       ret += "Post: " + sb.toString() + "\n\n"; 
       sb = new StringBuilder(""); 
       return; 

      } 


     } 
     if (localName.equals("status")) 
     { 
      howMany++; 
      bStore = false; 
     } 
    } 
    @Override 

    public void characters(char ch[], int start, int length) 
    { 

     if (bStore) 
     { 
//   System.out.println("start " +start+"length "+length); 
      String theString = new String(ch, start, length); 

      this.sb.append(theString+"start "+start+" length "+length); 
     } 
    } 

} 
 
InputSource is = new InputSource(getResources().openRawResource(R.raw.my)); 
       System.out.println("running xml file..... "); 
      // create the factory 
      SAXParserFactory factory = SAXParserFactory.newInstance(); 

      // create a parser 
      SAXParser parser = factory.newSAXParser(); 

      // create the reader (scanner) 
      XMLReader xmlreader = parser.getXMLReader(); 

      // instantiate our handler 
      FeedHandler fh = new FeedHandler(); 

      // assign our handler 
      xmlreader.setContentHandler(fh); 

      // perform the synchronous parse 
      xmlreader.parse(is); 

      // should be done... let's display our results 
      tvData.setText(fh.getResults());
1

Beispielcode

  1. Dokument erstellenBuilderFactory

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

    1. erstellen Document

    Document builder = Fabrik. neuDokumentBuilder();

    1. Eingabestrom Klassenladeprogramm cls = DomReader.class.getClassLoader erhalten(); InputStream ist = cls.getResourceAsStream ("XML-Datei");
      1. XML-Datei zu analysieren und Document-Objekt durch Aufrufen der Parse-Methode auf DocumentBuilder-Objekt abrufen. Dokument document = builder.parse (is);
      2. Traverse dom Baum Dokument-Objekt. SAX: Einfaches XML-Parsing. Es analysiert Knoten für Knoten Verfahrgeschwindigkeit von oben nach unten ist Low Speichernutzung Zurück Navigation mit Saxophon nicht möglich ist.

    // erforderlich Handler public class SaxParse Implementierung erweitert Default { } // neue Instanz von saxParserFactory SAXParserFactory Fabrik = SAXParserFactory.newInstance(); // neue Instanz von SAX-Parser SAXParser SAXParser = factory.newSAXParser(); // Parsen von XML-Dokument SAXParser.parse (neue Datei (Datei analysiert werden), neue SAXXMLParserImpl());