在复习SAX解析xml的时候,出现了这个异常提示信息“org.xml.sax.SAXException: No input specified”
一直在查找,一直没有发现是什么原因,
后来直接检查输入流,发现是输入流为空所造成的,只要确保输入流不为空就不会出现这个异常。
下面再复习一下Android中SAX方式解析xml:
1、首先需要一个解析器handler,该handler继承自DefaultHandler,handler中实现几个必要方法:
<span style="font-size:18px;">public class MySAXHandler extends DefaultHandler{ public void startDocument()throws SAXException{} public void endDocument()throws SAXException{} public void startElement(String uri,String localName,String qName,Attributes attr)throws SAXException{} public void endElement(String uri,String qName)throws SAXException{} public void characters(char[] ch,int start,int len)throws SAXException{} }</span>
2、解析入口方法
<span style="font-size:18px;">private void myXMLParser(InputStream input){ if(input==null){ //为空的操作 return ; } SAXParserFactory factory=SAXParserFactory.newInstance(); SAXParser parser=factory.newSAXParser(); InputSource is=new InputSource(input); MySAXHandler handler=new MySAXHandler(); parser.parse(is,handler); }</span>
注意:
1、如果是本地资源测试的话,使用ClassLoader获取输入时,请注意
<span style="font-size:18px;"> ClassLoader loader = this.getClassLoader(); input = loader.getResourceAsstream("com/mk/music/xml/RSS.xml");</span>这里getResourceAsstream要使用绝对路径,要不然会找不到资源文件(这里表示放在包com.mk.music.xml下面的RSS.xml)
2、如果是放在顶级,就是没有放在包的下面,则不需要包名,如
<span style="font-size:18px;"> ClassLoader loader = this.getClassLoader(); input = loader.getResourceAsstream("RSS.xml");</span>3、如果是放在工程的assets目录下面的话,需要注意,
<span style="font-size:18px;">input = this.getAssets().open("RSS.xml");</span>这里不需要使用绝对路径,只要文件完整名称;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。