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.
- Android: El editor XML predeterminado ya no se abre
- Escala de círculo según el tamaño de la pantalla
- Android LinearGradient XML
- Andorid cordova phonegap config.xml prefijo sin conexión
- Derecho Drawable en Android. No funciona
- Fuera de error de memoria al inflar el diseño xml simple en android
- Ejemplo de programa para android Parche relajante usando xml API
- Esquinas redondeadas redondeadas de Android XML con etiqueta de mapa de bits
- Intención de Fragmento a Actividad
- Disposición del botón de Android: consigue dos botones lado a lado en toda la pantalla
- Edición de Android Dibujo de rutas largas en MapView mediante análisis XML
- Android Databinding atributo xml duplicado
- Cómo configurar un diseño de menú principal en Android?
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
-
Crear documentBuilderFactory
DocumentBuilderFactory fábrica = DocumentBuilderFactory.newInstance ();
- Crear DocumentBuilder
Constructor de DocumentBuilder = fábrica. NewDocumentBuilder ();
- Obtener el flujo de entrada ClassLoader cls = DomReader.class.getClassLoader (); InputStream es = cls.getResourceAsStream ("archivo xml");
- Analizar archivo xml y obtener objeto de documento llamando método de análisis en objeto DocumentBuilder. Documento document = builder.parse (is);
- 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 ());
- Cancelación de una solicitud pendiente
- Android: apertura de la actividad de SMS con múltiples destinatarios especificados