SAX XMLParser无法正常工作

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(); 

      } 

感谢您的任何和所有帮助!

+0

你的xml是否包含名为“Link”的标签?如果您发布了xml输入,我们可能有更好的诊断机会。 –

+0

是的。只需打开此链接(https://gdata.youtube.com/feeds/api/videos?q=Crystallize+Lindsey+Stirling+Offical+Music+Video&orderby=relevance),然后点击Firefox中的CTRL-U即可查看该页面在点击搜索结果的最后结果之后获得源代码。即使你从外部登录if语句(所以任何时候解析器碰到一个对象),你仍然没有输出 – Shredder2794

+0

尝试“链接”,即没有资本。 – ggenglish

这是一个命名空间问题。

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方法,但你必须寻找合适的值,即检查“链接”而不是“链接”。

+0

我想出了问题所在!我试图在主线程上运行这个,而java不喜欢这样!抱歉我的错误,因为我对Android开发非常陌生。非常感谢您的耐心和帮助! – Shredder2794

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

+0

它可能没有崩溃,并且根本没有找到匹配。 –