Analizador SAX obtener atributo de endelement

Utilizo SAX XML Parser y cuando uso:

public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException 

Puedo obtener atributos. Pero necesito obtener los atributos de public void endElement

Para analizar algo así:

 <item name="test" value="somedata" /> 

Código:

Public class SAXXMLHandler extends DefaultHandler {

 private ArrayList<itemsList> items; private String tempVal; private itemsList tempEmp; private PackageManager manager; private String packName; public SAXXMLHandler(PackageManager manager, String packName) { items = new ArrayList<itemsList>(); this.manager = manager; this.packName = packName; } public void characters(char[] ch, int start, int length) throws SAXException { tempVal = new String(ch, start, length); } // Event Handlers public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { Log.d("INFO", "startElement " + localName + ", " + qName + ", " + attributes); // reset tempVal = ""; if (qName.equalsIgnoreCase("item")) { // create a new instance of employee tempEmp = new itemsList(); tempEmp.setName(attributes.getValue("name")); } } public void endElement(String uri, String localName, String qName) throws SAXException { Log.d("INFO", "endElement " + localName + ", " + qName); } 

Y no logcat de startElement

ACTUALIZAR

Yo uso en Fragmento:

 SAXXMLHandler handler = new SAXXMLHandler(); SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser(); saxParser.parse(asset, handler); items = SAXXMLHandler.icons; Util.l(String.valueOf(SAXXMLHandler.icons.size())); //log for(itemList item:SAXXMLHandler.icons) { Util.l(item.getComponent()+"\t\t"+item.getComponent()); //log } 

SAXXMLHandler mirar:

 public class SAXXMLHandler extends DefaultHandler { public static ArrayList<itemsList> items; private itemsList item; public SAXXMLHandler() { items = new ArrayList<itemsList>(); } public void characters(char[] ch, int start, int length) throws SAXException { } public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { item = new itemsList(); Log.d("INFO", "startElement " + localName + ", " + qName); if (qName.equalsIgnoreCase("item")) { item.setComponent(attributes.getValue("component")); items.add(item); } } public void endElement(String uri, String localName, String qName) throws SAXException { } } 

Y todavía nada: /

Archivo XML en otra aplicación que analizar http://pastebin.com/5GEthfmU

En la línea XML dada ..

 <item name="test" value="somedata" /> 

name y value son atributos que solo se pueden recuperar en el método startElement() . Debido a que el parámetro Attributes attributes sólo se pasa al startElement(String uri, String localName, String qName, Attributes attributes) . Si observa el endElement(String uri, String localName, String qName) no tiene Attributes attributes . Es por eso que no puede recuperar ningún atributo del método endElement() . Por lo tanto, si desea recuperar los attributes de un XML entonces tiene que recuperarlos dentro del startElement(String uri, String localName, String qName, Attributes attributes) .

Cambiar System.out.println a ur Log.ins ..

Artículo .java

 package com.rofl; public class Item { private String component; private String drawable; public String getComponent() { return component; } public void setComponent(String component) { this.component = component; } public String getDrawable() { return drawable; } public void setDrawable(String drawable) { this.drawable = drawable; } } 

SAXXMLHandler .java

  package com.rofl; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SAXXMLHandler extends DefaultHandler { public static void main(String argv[]) { try { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser(); SAXXMLHandler handler = new SAXXMLHandler(); saxParser.parse("src/file.xml", handler); System.out.println(SAXXMLHandler.itemList.size()); for(Item item:itemList) { System.out.println(item.getComponent()+"\t\t"+item.getDrawable()); } } catch (Exception e) { e.printStackTrace(); } } public static List<Item> itemList = new ArrayList<Item>(); private Item item; public SAXXMLHandler() { itemList = new ArrayList<Item>(); } public void characters(char[] ch, int start, int length) throws SAXException { } public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { item = new Item(); if (qName.equalsIgnoreCase("item")) { item.setComponent(attributes.getValue("component")); item.setDrawable(attributes.getValue("drawable")); itemList.add(item); } } public void endElement(String uri, String localName, String qName) throws SAXException { } } 

Salida será: –

 8 ComponentInfo{com.designrifts.ultimatethemeui/ultimatethemeui.themeactivity} icon ComponentInfo{com.chrislacy.actionlauncher.pro/com.chrislacy.launcher.Launcher} apps_actionlauncherpro ComponentInfo{com.teslacoilsw.launcher/com.android.launcher2.Launcher} apps_novalauncher ComponentInfo{com.teslacoilsw.launcher.prime/.NovaLauncherPrimeActivity} apps_novalauncher ComponentInfo{com.anddoes.launcher/com.anddoes.launcher.Launcher} apps_apexlauncher ComponentInfo{com.anddoes.launcher.pro/com.anddoes.launcher.pro.ApexLauncherProActivity} apps_apexlauncher ComponentInfo{org.adw.launcher/org.adw.launcherlib.Launcher} apps_adwlauncher ComponentInfo{org.adwfreak.launcher/org.adw.launcherlib.Launcher} apps_adwex 
  • Diferencia entre el analizador XML SAX, analizador de tracción y analizador de DOM en android
  • Android: ¿por qué utilizar XMLReader?
  • SaxParser en Android: final inesperado de excepción de documento
  • Cómo configurar UTF-8 para el archivo xml analizado utilizando SAX Parser en android
  • Obtener longitud desconocidaHttpInputStream al obtener InputStream de HttpURLConnection en android
  • Análisis de archivos XML grandes utilizando el analizador SAX (salte algunas líneas / etiquetas)
  • Android SAX Parsing: Cómo conservar Newlines desde dentro de una etiqueta CDATA
  • Cómo analizar el contenido html en android utilizando SAX PARSER
  • SAXParser no puede analizar algunos caracteres
  • Cómo recuperar el valor de un atributo que contiene dos puntos en el nombre del atributo utilizando xpath
  • Error de generación de Gradle: SAXParseException
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.