1

シンプルな SAX パーサーを実装しようとしています。

public class XmlParser {
    public parseXML(File inputFile) {

        SAXParserFactory factory = SAXParserFactory.newInstance();
        try {
            SAXParser   parser = factory.newSAXParser(); 
            SaxHandler handler = new SaxHandler();
            parser.parse(inputFile, handler);
        } ....
    }

    private static class SaxHandler extends DefaultHandler {

        public void startElement(String uri, String localName, 
                             String qName, Attributes attributes) throws SAXException {
        }

        public void characters(char ch[], int start, int length) 
                             throws SAXException { 
        }  

        public void endElement(String uri, String localName,
                           String qName) throws SAXException {
        }
    }
}

問題は、startElement メソッドをオーバーライドできないように見えることです。@Override を追加すると、「メソッドはスーパータイプのメソッドをオーバーライドまたは実装しません」というメッセージが表示されます。startElement を除いて、他のすべてのハンドラーが適切に呼び出されます。

ありがとうございました。

4

3 に答える 3

4

Attributesクラスのインポートが間違っているに違いありませんorg.xml.sax.Attributes

常に使用@Overrideしてください。これは、この正確な問題から保護するように設計されています。

于 2013-02-22T15:41:58.103 に答える
2

間違ったクラスDefaultHandlerまたはAttributesクラスをインポートした可能性がありますか?

インポートしたことを確認してください:

org.xml.sax.helpers.DefaultHandler
org.xml.sax.Attributes
于 2013-02-22T15:44:57.500 に答える
0

私の意見では、最も簡単な方法の 1 つは、このメソッドを手動で記述するのではなく、ctrl+space を使用して、(Eclipse で) コンテキスト メニューからメソッドをオーバーライドすることを選択することです。メソッドは @Override アノテーションを含む IDE によって自動的に生成され、同時に必要なパッケージがインポートされます。

于 2014-09-14T08:04:44.360 に答える