问题出现在下面这句中:
xmlReader.parse(new File(filename),new SAXCounter());
把它改成:
xmlReader.parse(new File(filename),this);
你的代码就不会再有问题了,原因是引用了不同实例的问题。

解决方案 »

  1.   

    报错
    'this' cannot be referenced form a static context
      

  2.   

    请问用String(p0,p1,p2);究竟得到的是节点的什么信息?
    我把static public void main(String[] args) {
    改成了
    public void ParseFile(String filename) {
    然后在其他java文件中调用
    SAXReader parser=new SAXReader();
    parser.ParseFile(strSourceFilePath) ;
    不管是xmlReader.parse(new File(filename),new SAXCounter());还是
    xmlReader.parse(new File(filename),new SAXCounter());都不行呀,输出的不是null而是空白,请问用String(p0,p1,p2);究竟得到的是节点的什么信息?
      

  3.   

    1)this 放哪里了?不new实例,直接用是不可以的!如果你这里的概念不太清楚的话我建议你用另外一个类调用这个解析类。2)如果这么声明,你应该知道了那几个String的意思了(你自己最好打印出来看看):
    public void startElement(
    String namespaceURI,
    String localName,
    String rawName,
    Attributes attrs)
    throws SAXException {}3)我没有你所有的SOURCE CODE,时间原因不再给你细分析,以下是我们工程中用到的解析代码段:
    //完成对xmlString的解析工作
    private void parser(String xmlString) throws WebException { SAXParserFactory spf = SAXParserFactory.newInstance();
    SAXParser saxParser = null;
    XMLReader reader = null;
    try {
    // 创建一个SAXParser解析器对象
    saxParser = spf.newSAXParser();
    reader = saxParser.getXMLReader(); } catch (Exception ex) {
    LogHelper log =
    new LogHelper("com.XXXXXXXXXXXXXXXX.class");
    log.log(getEnvHead(), 300004, ex.getMessage());
    if (GlobalNames.DEBUG_OUTPUT_FLAG) {
    System.err.println(ex);
    }
    throw new WebException("sax parser load error");
    }
    try { StringReader sr = new StringReader(xmlString);
    //注册handler,并进行解析 saxParser.parse(new org.xml.sax.InputSource(sr), this); } catch (Exception ioe) {
    LogHelper log =
    new LogHelper("com.XXXXXXXXXXXX.class");
    log.log(getEnvHead(), 300006, ioe.getMessage());
    if (GlobalNames.DEBUG_OUTPUT_FLAG) {
    System.err.println(ioe);
    }
    throw new WebException("IO error");
    }
    }
      

  4.   

    这就是全部代码:
    import org.xml.sax.helpers.DefaultHandler;
    import javax.xml.parsers.*;
    import org.xml.sax.*;
    import org.xml.sax.helpers.*;
    import java.util.*;
    import java.io.*;
    public class SAXReader extends DefaultHandler {
    java.util.Stack tags=new java.util.Stack();
    //--------------XML Content-------------
    String text=null;
    String url=null;
    String author=null;
    String description=null;
    String day=null;
    String year=null;
    String month=null;
    //----------------------------------------------
    public void endDocument() throws SAXException {
    System.out.println("------Parse End--------");
    }
    public void startDocument() throws SAXException {
    System.out.println("------Parse Begin--------");
    }
    public void startElement(String p0, String p1, String p2, Attributes p3) throws SAXException {
    tags.push(p2);
    }
    public void endElement(String p0, String p1, String p2) throws SAXException {
    tags.pop();
    //一个link节点的信息收集齐了,将其格式化输出
    if (p2.equals("sbml")) printout();
    }
    public void characters(char[] p0, int p1, int p2) throws SAXException {
    //从栈中得到当前节点的信息
    String tag=(String) tags.peek();
    if (tag.equals("specie")) text=new String(p0,p1,p2);
    else if (tag.equals("reaction")) url=new String(p0,p1,p2);
    else if (tag.equals("kineticLaw")) author=new String(p0,p1,p2);
    else if (tag.equals("day")) day=new String(p0,p1,p2);
    else if (tag.equals("month")) month=new String(p0,p1,p2);
    else if (tag.equals("year")) year=new String(p0,p1,p2);
    else if (tag.equals("description")) year=new String(p0,p1,p2);
    }
    private void printout(){
    System.out.print("specie: ");
    System.out.println(text);
    System.out.print("reaction: ");
    System.out.println(url);
    System.out.print("kineticLaw: ");
    System.out.println(author);
    System.out.print("Date: ");
    System.out.println(day+"-"+month+"-"+year);
    System.out.print("Description: ");
    System.out.println(description);
    System.out.println();
    }
    //static public void main(String[] args) {
    public void ParseFile(String filename) {
    //String filename = null;
    boolean validation = false;
    //filename="links.xml";
    SAXParserFactory spf = SAXParserFactory.newInstance();
    SAXParser saxParser=null;
    try {
    saxParser = spf.newSAXParser();
    } catch (Exception ex) {
    System.err.println(ex);
    System.exit(1);
    }
    try {
    //saxParser.parse(new File(args[0]),new SAXReader());
      saxParser.parse(new File(filename),this);
    } catch (SAXException se) {
    System.err.println(se.getMessage());
    System.exit(1);
    } catch (IOException ioe) {
    System.err.println(ioe);
    System.exit(1);
    }
    }
    }
    然后在其他页面中调用
    SAXReader parser=new SAXReader();
    parser.ParseFile(strSourceFilePath);
    这就是全部代码了。因为要对xml的内容做详细操作,所以用楼上的方法好像简单了些。实在不好意思:)
      

  5.   

    发现直接在characters(char[] p0, int p1, int p2) 中输出new String(p0,p1,p2);得到的好像是空白,请问是怎么回事?