Android SAXPArser,解析机箱标签,怎么样?

时间:2010-11-12 07:13:12

标签: android xml parsing

我想解析所有的机箱标签,用我的SAXPArser,我该怎么做?

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

2 个答案:

答案 0 :(得分:2)

我将指出一个关于XML解析的非常有用的资源,因为我当然不打算编写整个解析器。

This是关于在Android中解析XML文件的有趣读物,在我开始Android开发时帮助了我。我会使用SAX解析器,即使它起初可能有点复杂。

修改

DefaultHandler的{​​{1}}方法有四个参数;名称空间URI,本地名称(不带前缀),带前缀的完全限定名称和该标记的属性。看起来像这样。

现在,在该方法中,如果要访问tags属性的内容,只需调用属性startElement()方法,将要获取内容的属性名称传递给它,如下所示。< / p>

那将是XML标签。

getValue()

这就是处理它的<MyTag myAttribute="someValue"> 方法。

startElement()

答案 1 :(得分:2)

好吧,我使用了另一种方法,我希望它能帮助那些寻找答案的人。

我使用地图存储所有数据。

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";