2014-02-17 4 views
5

Я использую SAX XML Parser и когда я использую:SAX атрибут анализатор Достаньте из EndElement

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

я могу получить атрибуты. Но мне нужно получить атрибуты из общественной ничтожной EndElement

Чтобы разобрать что-то вроде этого:

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

Код:

общественного класса SAXXMLHandler расширяет 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); 

} 

и Дон 't logcat from startElement

UPDATE

Я использую в фрагменте:

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 взгляд:

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 { 

    } 
} 

И до сих пор ничего:/

XML файл в другом приложении, которое я анализирую http://pastebin.com/5GEthfmU

+0

можете ли вы разместить свой код, чтобы показать, что вы пробовали до сих пор? –

ответ

1

Изменить System.out.println ур Log.ins ..

Item .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 { 

    } 
} 

выход будет: -

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 
+0

Я не могу этого сделать. Я получаю этот файл из другого приложения. – drozdzynski

+0

У меня есть файл: https://github.com/designrifts/Ultimate_Theme_UI_Template/blob/master/res/xml/appfilter.xml, но с 1000 строками: P – drozdzynski

+0

Нравится: drozdzynski

1

В данной строке XML ..

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

name и value - это атрибуты, которые могут быть получены только в методе startElement(). Потому что параметр Attributes attributes передается только в метод startElement(String uri, String localName, String qName, Attributes attributes). Если вы посмотрите на метод endElement(String uri, String localName, String qName), то нет Attributes attributes. Вот почему вы не можете получить какой-либо атрибут из метода endElement(). Итак, если вы хотите получить attributes с XML, вам необходимо получить их внутри метода startElement(String uri, String localName, String qName, Attributes attributes).

Смежные вопросы