首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SAX XMLParser不工作

SAX XMLParser不工作
EN

Stack Overflow用户
提问于 2012-10-06 10:19:47
回答 2查看 230关注 0票数 0

我关注了多个关于如何为Android平台设置SAX XML解析器的在线教程,但它们似乎都不起作用!有什么问题吗?下面是我的代码:

导入:

代码语言:javascript
复制
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会显示“测试”?

代码语言:javascript
复制
 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();

            }

感谢大家的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-06 21:52:16

这是一个名称空间问题。

代码语言:javascript
复制
SAXParserFactory SPF = SAXParserFactory.newInstance();
SAXParser SP = SPF.newSAXParser();

为您提供了一个不能正确处理名称空间的解析器。

如果您将startElement更改为检查qName的值"link",您的代码将会正常工作,但这在某种程度上是一个创可贴修复。

虽然此元素位于为文档指定的默认命名空间http://www.w3.org/2005/Atom中,但文档中有命名空间。

您应该告诉解析器工厂为您提供一个支持名称空间的解析器:

代码语言:javascript
复制
SAXParserFactory SPF = SAXParserFactory.newInstance();
SPF.setNamespaceAware(true);
SAXParser SP = SPF.newSAXParser();

然后你就可以在不改变startElement方法的情况下得到预期的结果,除非你必须寻找正确的值,即检查“链接”而不是“链接”。

票数 1
EN

Stack Overflow用户

发布于 2012-10-06 13:29:10

检查你的logcat中是否有大量的黄色文本。它可能会通知您任何导致SAX解析器崩溃的错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12756134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档