希望有人可以提供一些指导 - 我一直在使用带有多个Feed的android sax解析器。现在,当我想解析包含以下内容的项目时:
<category>category</category>
<dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">creator</dc:creator>
<dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2011-10-13T07:00:15Z</dc:date>
<geo:lat>51.95271682739258</geo:lat>
<geo:long>-0.21096819639205933</geo:long>
我可以获得“category”标签的值,但其他人没有。
使用的代码遵循http://www.ibm.com/developerworks/opensource/library/x-android/中的示例,特别是解析代码的代码段:
Element item = channel.getChild("item");
item.getChild("category").setEndTextElementListener(new EndTextElementListener() {
public void end(String body) {
Log.e("mydebug","cat>>"+body+"<");
}
});
item.getChild("dc:creator").setEndTextElementListener(new EndTextElementListener() {
public void end(String body) {
Log.e("mydebug","creator>>"+body+"<");
}
});
生成此输出:
10-13 14:13:12.763: ERROR/mydebug(609): cat>>category<
10-13 14:13:12.763: ERROR/mydebug(609): cat>>category2<
我正在使用以下内容:
import android.sax.Element;
import android.sax.EndElementListener;
import android.sax.EndTextElementListener;
import android.sax.RootElement;
import android.util.Log;
import android.util.Xml;
我缺少什么? 我唯一可以猜到的是标签中的“:”给了我一些问题,但我找不到任何类似问题的例子。
非常感谢您阅读。
答案 0 :(得分:4)
在DefaultHandler中使用startElement()和endElement()方法时,会传入本地名称和限定名称值。请确保检查“dc:creator”之类的限定名称,否则他们会不会匹配。
另外,您可以考虑使用XML Pull Parser,因为它比SAX重量更轻,可能更适合您的需求:http://developer.android.com/reference/org/xmlpull/v1/XmlPullParserFactory.html
答案 1 :(得分:0)
您使用的API只会查看元素的本地名称:Android Documentation
请改为尝试:
item.getChild("creator").setEndTextElementListener(new EndTextElementListener() {
public void end(String body) {
Log.e("mydebug","creator>>"+body+"<");
}
});