2015-04-20 143 views
0

我傳遞一個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; 
} 

回答

1

應該org.xml.sax.helpers.DefaultHandlerjdk.internal...

所以

import org.xml.sax.helpers.DefaultHandler; 

你或許應該還定義擴展了DefaultHandler不僅內嵌它的類。

+0

爲什麼定義它而不是內聯它會更好? – admrply

+1

只是一個更好的做法。作爲內部類持有對包含類的引用,可能會發生內存泄漏。 – Zielu

+0

我會如何將它改爲類而不是內聯?是否只是創建一個以'private Handler()extends DefaultHandler {...}'開頭的新子類的情況? – admrply

相關問題