当前位置: 代码迷 >> Java Web开发 >> sax解析xml时覆盖defaultHandler时的有关问题
  详细解决方案

sax解析xml时覆盖defaultHandler时的有关问题

热度:8856   发布时间:2013-02-25 21:12:22.0
sax解析xml时覆盖defaultHandler时的问题
为什么在 4设置内容处理器
 reader.setContentHandler(new TagValueHandler());时会出现错误提示:

No enclosing instance of type saxReader2 is accessible. Must qualify the allocation with an enclosing instance of type saxReader2 (e.g. x.new A() where x is an instance of saxReader2).

还有在用eclipse时,覆盖defaultHandler的时候为什么参数列表都是arg,而没有明确地列出:url ,localname,name呢?

Java code
package cn.xushuai.sax;<?xml version="1.0" encoding="UTF-8" standalone="no"?><exam>    <student examid="1111" idcard="0001">        <name>张三</name>        <location>北京</location>        <grade>90</grade>    </student>    <student examid="2222" idcard="0002">        <name>李四</name>        <location>上海</location>        <grade>93</grade>    </student>import java.io.IOException;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.XMLReader;import org.xml.sax.helpers.DefaultHandler;public class saxReader2 {    public static void main(String args) throws ParserConfigurationException, SAXException, IOException {        // TODO Auto-generated constructor stub        //1.创建解析工厂        SAXParserFactory factory = SAXParserFactory.newInstance();            //2.获取解析器        SAXParser sp = factory.newSAXParser();            //3.得到读取器        XMLReader reader = sp.getXMLReader();                //4.设置内容处理器        reader.setContentHandler(new TagValueHandler());            //5.读取xml文档内容        reader.parse("src/exam.xml");    }        class TagValueHandler extends DefaultHandler{        private String currentTag;        private int neednumber = 2;        private int currentNumber=0;                        @Override        public void startElement(String arg0, String arg1, String arg2,                Attributes arg3) throws SAXException {                        currentTag = arg2;            if(currentTag.equals("作者"))                currentNumber++;        }                        @Override        public void characters(char[] arg0, int arg1, int arg2)                throws SAXException {            if("作者".equals(currentTag)&& currentNumber==neednumber){                                System.out.println(new String(arg0,arg1,arg2));            }        }        @Override        public void endElement(String arg0, String arg1, String arg2)                throws SAXException {            currentTag= null;        }                    }}


------解决方案--------------------------------------------------------
错误。
class TagValueHandler前面加static

还有在用eclipse时,覆盖defaultHandler的时候为什么参数列表都是arg,而没有明确地列出:url ,localname,name呢?
这个因为Eclipse里没有指定DefaultHandler的源代码。
它不知道变量名字。 如果你添加了源代码就可以了。
  相关解决方案