我关注了多个关于如何为Android平台设置SAX XML解析器的在线教程,但它们似乎都不起作用!有什么问题吗?下面是我的代码:
导入:
import java.net.URL;
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.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import android.app.Activity;
import android.util.Log;这段代码在一个我知道会被调用的方法中,但是为什么but logcat会显示“测试”?
try {
URL XMLURL = new URL("https://gdata.youtube.com/feeds/api/videos?q=Crystallize+Lindsey+Stirling+Offical+Music+Video&orderby=relevance");
SAXParserFactory SPF = SAXParserFactory.newInstance();
SAXParser SP = SPF.newSAXParser();
DefaultHandler mainHandler = new DefaultHandler(){
@Override
public void startElement(String uri, String localName,
String qName, Attributes attributes)
throws SAXException {
if(localName.equals("Link")){
String possibleURL = attributes.getValue("href");
Log.i("TEST","TESTING");
}
}
};
SP.parse(new InputSource(XMLURL.openStream()),mainHandler);
} catch (Exception e) {
e.printStackTrace();
}感谢大家的帮助!
发布于 2012-10-06 21:52:16
这是一个名称空间问题。
SAXParserFactory SPF = SAXParserFactory.newInstance();
SAXParser SP = SPF.newSAXParser();为您提供了一个不能正确处理名称空间的解析器。
如果您将startElement更改为检查qName的值"link",您的代码将会正常工作,但这在某种程度上是一个创可贴修复。
虽然此元素位于为文档指定的默认命名空间http://www.w3.org/2005/Atom中,但文档中有命名空间。
您应该告诉解析器工厂为您提供一个支持名称空间的解析器:
SAXParserFactory SPF = SAXParserFactory.newInstance();
SPF.setNamespaceAware(true);
SAXParser SP = SPF.newSAXParser();然后你就可以在不改变startElement方法的情况下得到预期的结果,除非你必须寻找正确的值,即检查“链接”而不是“链接”。
发布于 2012-10-06 13:29:10
检查你的logcat中是否有大量的黄色文本。它可能会通知您任何导致SAX解析器崩溃的错误。
https://stackoverflow.com/questions/12756134
复制相似问题