Android SAXPArser, разбор тега вложения, как? - PullRequest
2 голосов
/ 12 ноября 2010

Я хочу проанализировать все теги enclosure с моим SAXPArser, как я могу это сделать?

<enclosure url="http://website.com/picture.jpg" width="120" height="90" type="image/jpeg" length="10000" />

Ответы [ 2 ]

2 голосов
/ 25 марта 2012

Ну, я использовал другой подход, и я надеюсь, что он может быть полезен для тех, кто ищет этот ответ.

Я использовал карту для хранения всех данных.

NodeList nodes = doc.getElementsByTagName(TAG_ITEM_NEWS);

for (int i = 0; i < nodes.getLength(); i++)
    {                           
        final HashMap<String, String> map = new HashMap<String, String>();  
        Element e = (Element)nodes.item(i);                 

        // ENCLOSURE:
        final NamedNodeMap e_attr = Read_XML.getElementAttributes(e,TAG_ENCLOSURE_NEWS);
        map.put(TAG_ENCLOSURE_URL_NEWS, Read_XML.getSingleAttribute(e_attr,TAG_ENCLOSURE_URL_NEWS));
        map.put(TAG_ENCLOSURE_TYPE_NEWS, Read_XML.getSingleAttribute(e_attr,TAG_ENCLOSURE_TYPE_NEWS));
        map.put(TAG_ENCLOSURE_LENGTH_NEWS, Read_XML.getSingleAttribute(e_attr,TAG_ENCLOSURE_LENGTH_NEWS));
        // GUID:
        final NamedNodeMap g_attr = Read_XML.getElementAttributes(e,TAG_GUID_NEWS);
        map.put(TAG_GUID_ISPERMALINK_NEWS, Read_XML.getSingleAttribute(g_attr,TAG_GUID_ISPERMALINK_NEWS));
        // ALL THE OTHERS:
        map.put(TAG_TITLE_NEWS, Leggi_XML.getValue(e, TAG_TITLE_NEWS));
        map.put(TAG_LINK_NEWS, Leggi_XML.getValue(e, TAG_LINK_NEWS));
        map.put(TAG_DESCRIPTION_NEWS, Leggi_XML.getValue(e, TAG_DESCRIPTION_NEWS));
        map.put(TAG_DATE_NEWS, Leggi_XML.getValue(e, TAG_DATE_NEWS));

        list_news.add(map);
    }

Теперь основные методы извлечения атрибутов:

public final static NamedNodeMap getElementAttributes( Element elem, String str ) {
     NamedNodeMap attrs;
     if( elem != null){
         if (elem.getElementsByTagName(str)!=null) {
             Node enclosure = elem.getElementsByTagName(str).item(0);
                attrs = enclosure.getAttributes();
                return attrs;
         }
     }
     return null;
 }

И

public final static String getSingleAttribute( NamedNodeMap attrs, String str ) {
     if (attrs!=null) {
         Node node = attrs.getNamedItem(str);
         String attribute = null;
         if (node != null) {
            attribute = node.getNodeValue();
            return attribute;
         }
     }
     return "";
 }

Теги определены в другом месте как: public static final String TAG_ENCLOSURE_NEWS = "enclosure";

2 голосов
/ 12 ноября 2010

Я укажу вам очень полезный ресурс, касающийся синтаксического анализа XML, поскольку я, конечно, не собираюсь писать весь синтаксический анализатор.

Этот представляет собой интересное прочтение при разборе файлов XMLв Android, который помог мне, когда я начал разработку Android.Я бы использовал SAX-парсер, хотя поначалу он мог бы быть немного сложнее.

РЕДАКТИРОВАТЬ:

Метод DefaultHandler startElement() занимает четырепараметры;URI пространства имен, локальное имя (без префикса), полное имя с префиксом и атрибутами этого тега.Это выглядит следующим образом.

Теперь в этом методе, если вы хотите получить доступ к содержимому атрибута тегов, вы просто вызываете метод атрибутов getValue(), передавая ему имя атрибута, от которого вы хотите получить содержимое какСтрока, как показано ниже.

Это будет тег XML.

<MyTag myAttribute="someValue">

И это метод startElement(), обрабатывающий его.

@Override
public void startElement(String uri, String localName, String qName, 
    Attributes atts) throws SAXException {
        if(localName.equals("MyTag")) {
            String attsValue = atts.getValue("myAttribute");
        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...