无法解析文件和处理程序中的SAXParser

问题描述:

我传递一个XML文件和处理程序的SAXParser的,但我得到这个错误: Cannot resolve method 'parse(java.io.File, jdk.internal.org.xml.sax.helpers.DefaultHandler)'无法解析文件和处理程序中的SAXParser

的解析方法的属性被定义为( File,DefaultHandler)完全匹配,所以我不确定哪里出错。以下是完整的方法:

public String readXML (File readFile) throws Exception { 
    SAXParserFactory saxFactory = SAXParserFactory.newInstance(); 
    SAXParser saxParser = saxFactory.newSAXParser(); 
    final String outputString = ""; 
    DefaultHandler handler = new DefaultHandler() { 
     boolean bArtist = false; 
     boolean bAlbumName = false; 
     boolean bYear  = false; 
     boolean bGenre  = false; 

     public void startElement(String uri, String localName, String qName, Attributes attr) 
       throws SAXException { 
      if (qName.equalsIgnoreCase("ARTIST")) { bArtist = true; } 
      if (qName.equalsIgnoreCase("ALBUMNAME")) { bAlbumName = true; } 
      if (qName.equalsIgnoreCase("YEAR"))  { bYear = true; } 
      if (qName.equalsIgnoreCase("GENRE"))  { bGenre = true; } 
     } 
     public void characters(char ch[], int start, int length) { 
      if (bArtist) { 
       outputString.concat("Artist: " + new String(ch,start,length) + "\n"); 
      } 
      if(bAlbumName) { 
       outputString.concat("Album: " + new String(ch,start,length) + "\n"); 
      } 
      if(bYear) { 
       outputString.concat("Year: " + new String(ch,start,length) + "\n"); 
      } 
      if(bGenre) { 
       outputString.concat("Genre: " + new String(ch,start,length) + "\n"); 
      } 
      outputString.concat("\n"); 
     } 
    }; 

    saxParser.parse(readFile,handler); 
    return outputString; 
} 

应该org.xml.sax.helpers.DefaultHandlerjdk.internal...

所以

import org.xml.sax.helpers.DefaultHandler; 

你或许应该还定义扩展了DefaultHandler不仅内嵌它的类。

+0

为什么定义它而不是内联它会更好? – admrply

+1

只是一个更好的做法。作为内部类持有对包含类的引用,可能会发生内存泄漏。 – Zielu

+0

我会如何将它改为类而不是内联?是否只是创建一个以'private Handler()extends DefaultHandler {...}'开头的新子类的情况? – admrply