Análisis de archivos XML locales con Sax en Android

¿Puede alguien decirme cómo analizar un archivo XML local almacenado en el sistema utilizando SAX, con un código de ejemplo? También dígame dónde puedo encontrar información sobre eso.

Para leer desde XML en su aplicación, cree una carpeta en su carpeta res dentro de su proyecto llamada "xml" (minúsculas). Almacene su xml en esta carpeta recién creada. Para cargar el XML 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 ie, START_DOCUMENT etc. 

A continuación, puede comenzar a procesar nodos, atributos, etc y el texto contenido dentro de la cubierta del tipo de evento, una vez procesada llamada myxml.next () 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 } 
 Paquete 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 = "";
     Booleano bStore = false;
     Int howMany = 0;

     FeedHandler () {}

     Cadena getResults ()
     {
         Return "de datos XML analizados. \ NHay actualizaciones de estado [" + howMany + "] \ n \ n" + ret;
     }
     @Anular
     Public void startDocument () lanza SAXException 
     {
         // inicializar "list"
     }

     @Anular
     Public void endDocument () throws SAXException
     {

     }

     @Anular
     Public void startElement (String namespaceURI, String localName, String qName, Atributos atts) lanza SAXException {

         tratar {
             If (localName.equals ("status"))
             {
                 This.sb = nuevo StringBuilder ("");
                 BStore = true;
             }
             If (localName.equals ("user")) 
             {
                 BStore = false;
             }
             If (localName.equals ("text")) 
             {
                 This.sb = nuevo StringBuilder ("");
                 Log.i ("sb", sb + "");

             }
             If (localName.equals ("created_at")) 
             {
                 This.sb = nuevo StringBuilder ("");
             }
         } Catch (excepción e) 
         {

             Log.d ("error en startElement", e.getStackTrace (). ToString ());
         }
     }
     @Anular

     Public void endElement (String namespaceURI, String localName, String qName) lanza SAXException 
     {

         If (bStore) 
         {
             If (localName.equals ("created_at"))
             {
                 Ret + = "Date:" + sb.toString () + "\ n"; 
                 Sb = nuevo StringBuilder ("");
                 regreso;

             }

             If (localName.equals ("user"))
             {
                 BStore = true;
             }

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

                 Ret + = "Mensaje:" + sb.toString () + "\ n \ n";
                 Sb = nuevo StringBuilder ("");
                 regreso;

             }


         }
         If (localName.equals ("status"))
         {
             HowMany ++;
             BStore = false;
         }
     }
     @Anular

     Public void caracteres (char ch [], int start, int longitud)
     {

         If (bStore) 
         {
 // System.out.println ("start" + start + "longitud" + longitud);
             Cadena theString = nueva String (ch, start, length);

             This.sb.append (theString + "start" + start + "longitud" + longitud);
         }
     }

 }
 InputSource es = nuevo InputSource (getResources (). OpenRawResource (R.raw.my));
                 System.out.println ("ejecutar archivo xml .....");
             // crear la fábrica
             SAXParserFactory fábrica = SAXParserFactory.newInstance ();

             // crear un parser
             SAXParser parser = factory.newSAXParser ();

             // crear el lector (escáner)
             XMLReader xmlreader = parser.getXMLReader ();

             // instancia de nuestro manejador
             FeedHandler fh = nuevo FeedHandler ();

             // asignar nuestro manejador
             Xmlreader.setContentHandler (fh);

             // realiza el análisis sincrónico
             Xmlreader.parse (es);

             // se debe hacer ... vamos a mostrar nuestros resultados
             TvData.setText (fh.getResults ()); 

Código de muestra

  1. Crear documentBuilderFactory

    DocumentBuilderFactory fábrica = DocumentBuilderFactory.newInstance ();

    1. Crear DocumentBuilder

    Constructor de DocumentBuilder = fábrica. NewDocumentBuilder ();

    1. Obtener el flujo de entrada ClassLoader cls = DomReader.class.getClassLoader (); InputStream es = cls.getResourceAsStream ("archivo xml");
      1. Analizar archivo xml y obtener objeto de documento llamando método de análisis en objeto DocumentBuilder. Documento document = builder.parse (is);
      2. Traverse árbol dom utilizando objeto de documento. SAX: Simple xml parsing. Analiza de nodo a nodo Travesaje es de arriba a abajo Bajo uso de memoria La navegación trasera no es posible con saxofón.

    // implementación de los manejadores necesarios clase pública SaxParse extends DefaultHandler {} // nueva instancia de saxParserFactory SAXParserFactory factory = SAXParserFactory.newInstance (); // NUEVA INSTANCIA DE SAX PARSER SAXParser saxparser = factory.newSAXParser (); // Parsing xml document SAXParser.parse (nuevo archivo (archivo a ser analizado), nuevo SAXXMLParserImpl ());

  • ¿Cómo funciona el atributo androide Xml android: onClick = "..." trabajo detrás de las escenas?
  • Excepción generada durante la representación: Las dependencias circulares no pueden existir en RelativeLayout Los detalles de la excepción se registran en Ventana> Mostrar vista> Registro de errores
  • Cómo generar simple-xml java objeto anotado desde el esquema xsd
  • Android: ListView entero cambia el color en el foco, no sólo el elemento secundario ListView
  • Acolchado CardView y esquinas redondeadas
  • Análisis de un archivo XML en Java para obtener una lista de nombres
  • Android xml parámetros dibujables
  • ¿Definir un estilo de pintura, color, etc en XML?
  • Cambiar del diseño main.xml a otro diseño
  • ¿Cómo hacer el borde inferior en formato XML seleccionable selector?
  • La configuración de un indicador personalizado para ExpandableListView no funciona
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.