代码之家  ›  专栏  ›  技术社区  ›  Praxder

SAX XMLParser不工作

  •  0
  • Praxder  · 技术社区  · 13 年前

    我已经学习了许多关于如何为Android平台设置SAXXML解析器的在线教程,但似乎都不起作用!怎么了?这是我的代码:

    进口:

    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;
    

    这个代码在一个我知道被调用的方法中,但为什么logcat显示“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 回复  |  直到 13 年前
        1
  •  1
  •   Don Roby    13 年前

    这是一个命名空间问题。

    SAXParserFactory SPF = SAXParserFactory.newInstance();
    SAXParser SP = SPF.newSAXParser();
    

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

    如果将startElement更改为check qName 对于值“链接”,您的代码可以工作,但这有点像创可贴。

    那里 名称空间,尽管此元素在默认名称空间中 http://www.w3.org/2005/Atom 为文档指定。

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

    SAXParserFactory SPF = SAXParserFactory.newInstance();
    SPF.setNamespaceAware(true);
    SAXParser SP = SPF.newSAXParser();
    

    然后,您将在不更改 startElement 方法,除非您必须查找正确的值,即检查“链接”而不是“链接”。

        2
  •  0
  •   AC Arcana    13 年前

    查看您的日志文件中是否有大块黄色文本。它可能会通知您导致SAX解析器崩溃的任何错误。