¿Alguien puede decirme cómo analizar un archivo XML local almacenado en el sistema usando SAX, con un código de ejemplo? Por favor también dime dónde puedo encontrar información sobre eso.Analizando archivo XML local usando Sax en Android
Respuesta
Para leer desde XML en su aplicación, cree una carpeta en su carpeta de res dentro de su proyecto llamada "xml" (minúscula). Almacene su xml en esta carpeta recién creada. Para cargar el XML a partir de sus recursos,
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.
A continuación, puede empezar a procesar nodos, atributos, etc y el texto contenido dentro de la carcasa por el tipo de evento, una vez procesada myxml.next llamada() para obtener el próximo evento, es decir, ,
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());
código de ejemplo
Crear documentBuilderFactory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- Crear DocumentBuilder
DocumentBuilder constructor = fábrica. newDocumentBuilder();
- obtener flujo de entrada ClassLoader cls = DomReader.class.getClassLoader(); InputStream is = cls.getResourceAsStream ("archivo xml");
- analiza el archivo xml y obtén el objeto Documento llamando al método de análisis en el objeto DocumentBuilder. Documento document = builder.parse (es);
- Traverse dom tree utilizando el objeto del documento. SAX: Análisis XML simple. Analiza el nodo por nodo El recorrido es de arriba a abajo Uso de memoria baja La navegación hacia atrás no es posible con sax.
// implementación de controladores necesarios SaxParse clase pública se extiende DefaultHandler {} // nueva instancia de SAXParserFactory fábrica SAXParserFactory = SAXParserFactory.newInstance(); // NUEVA INSTANCIA DE SAX PARSER SAXParser saxparser = factory.newSAXParser(); // Analizando el documento xml SAXParser.parse (nuevo archivo (archivo a analizar), nuevo SAXXMLParserImpl());
- 1. Cadena Parse XML usando SAX
- 2. Analizando un archivo xml local en iOS sdk
- 3. Generando XML usando SAX y Java
- 4. Analizando XML usando XDocument
- 5. Analizar archivo XML local en Android
- 6. Analizando html con el analizador SAX
- 7. Analizando una estructura XML con una cantidad desconocida de recurrencias usando SAX
- 8. Analizando archivos XML grandes usando el analizador SAX (omita algunas líneas/etiquetas)
- 9. Analizando un archivo XML en C#
- 10. Android: análisis DOM vs SAX vs XMLPullParser?
- 11. Analizando archivos pseudo-xml grandes en python
- 12. Android: lectura de XML del recurso local (para pruebas)
- 13. Analizando XML usando el terminal de Unix
- 14. Analizando un archivo XML con PowerShell
- 15. Analizando XML en iPhone
- 16. Analizador ligero XML C++ SAX
- 17. Analizando XML en Python usando el ejemplo de ElementTree
- 18. Analizando bloques XML CDATA
- 19. Analizando un XML HttpResponse
- 20. SAX vs XmlTextReader - SAX en C#
- 21. Analizando XML en Web Workers
- 22. Analizando el archivo JSON usando JSONKit
- 23. Analizando XML CDATA con PHP
- 24. análisis XML - elementtree vs SAX y DOM
- 25. Cómo analizar XML utilizando el analizador SAX
- 26. Analizando RSS en Android
- 27. Analizando XML en un Trabajador Web
- 28. Analizando XML/RSS desde URL usando Java Script
- 29. XSLT: ¿Analizando HTML incrustado en XML?
- 30. Abrir archivo Html local en Webview - Android