SAX XMLParser无法正常工作

时间:2012-10-06 02:19:47

标签: java android xml parsing sax

我已经关注了如何为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();

            }

感谢您的帮助!

2 个答案:

答案 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解析器的任何错误。