我想解析所有的机箱标签,用我的SAXPArser,我该怎么做?
<enclosure url="http://website.com/picture.jpg" width="120" height="90" type="image/jpeg" length="10000" />
答案 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";