Kann mir jemand sagen, wie eine lokale XML-Datei in dem System mit SAX, mit einem Beispiel-Code gespeichert zu analysieren? Bitte sagen Sie mir auch, wo ich Informationen dazu finden kann.Parsing lokalen XML-Datei mit Sax in Android
Antwort
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
}
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());
Beispielcode
Dokument erstellenBuilderFactory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- erstellen Document
Document builder = Fabrik. neuDokumentBuilder();
- Eingabestrom Klassenladeprogramm cls = DomReader.class.getClassLoader erhalten(); InputStream ist = cls.getResourceAsStream ("XML-Datei");
- XML-Datei zu analysieren und Document-Objekt durch Aufrufen der Parse-Methode auf DocumentBuilder-Objekt abrufen. Dokument document = builder.parse (is);
- 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());