无法解析文件和处理程序中的SAXParser
问题描述:
我传递一个XML文件和处理程序的SAXParser的,但我得到这个错误: 无法解析文件和处理程序中的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.DefaultHandler
不jdk.internal...
所以
import org.xml.sax.helpers.DefaultHandler;
你或许应该还定义扩展了DefaultHandler不仅内嵌它的类。
为什么定义它而不是内联它会更好? – admrply
只是一个更好的做法。作为内部类持有对包含类的引用,可能会发生内存泄漏。 – Zielu
我会如何将它改为类而不是内联?是否只是创建一个以'private Handler()extends DefaultHandler {...}'开头的新子类的情况? – admrply