SAX XMLParser无法正常工作
我已经关注了如何为Android平台设置SAX XML解析器的多个在线教程,但它们都不起作用!有什么问题?我的继承人代码:SAX XMLParser无法正常工作
进口:
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;
此代码是,我知道被调用的方法,但为什么doesent 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();
}
感谢您的任何和所有帮助!
这是一个命名空间问题。
SAXParserFactory SPF = SAXParserFactory.newInstance();
SAXParser SP = SPF.newSAXParser();
给你一个不能正确处理命名空间的解析器。
如果更改startElement以检查值为“link”的qName
,那么您的代码将可以正常工作,但这是一种创可贴修复方法。
还有是这个文档中的命名空间,虽然这个元素是在为文档指定的默认命名空间http://www.w3.org/2005/Atom。
你应该告诉解析器工厂给你一个命名空间感知的解析器:
SAXParserFactory SPF = SAXParserFactory.newInstance();
SPF.setNamespaceAware(true);
SAXParser SP = SPF.newSAXParser();
然后你会得到预期的结果不改变startElement
方法,但你必须寻找合适的值,即检查“链接”而不是“链接”。
我想出了问题所在!我试图在主线程上运行这个,而java不喜欢这样!抱歉我的错误,因为我对Android开发非常陌生。非常感谢您的耐心和帮助! – Shredder2794
检查你的logcat是否有大块的黄色文本。它可能会通知您有关SAX解析器崩溃的任何错误。
它可能没有崩溃,并且根本没有找到匹配。 –
你的xml是否包含名为“Link”的标签?如果您发布了xml输入,我们可能有更好的诊断机会。 –
是的。只需打开此链接(https://gdata.youtube.com/feeds/api/videos?q=Crystallize+Lindsey+Stirling+Offical+Music+Video&orderby=relevance),然后点击Firefox中的CTRL-U即可查看该页面在点击搜索结果的最后结果之后获得源代码。即使你从外部登录if语句(所以任何时候解析器碰到一个对象),你仍然没有输出 – Shredder2794
尝试“链接”,即没有资本。 – ggenglish