我已经关注了如何为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;
此代码在我知道的方法中被调用,但为什么loge显示“TESTING”?
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();
}
感谢您的帮助!
答案 0 :(得分:1)
这是命名空间问题。
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
方法,除非您必须查找正确的值,即检查“链接”而不是“链接”。
答案 1 :(得分:0)
检查你的logcat是否有一大块黄色文本。它可能会通知您有关崩溃SAX解析器的任何错误。