我在使用java sax解析器打开stackoverflow发布XML转储时遇到问题。它识别每个元素的结尾,但似乎跳过了startElement方法。我正在使用示例代码:

 try {

            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser saxParser = factory.newSAXParser();

            DefaultHandler handler = new DefaultHandler() {

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

                    System.out.println("Start Element :" + qName);

                }

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

                    System.out.println("End Element :" + qName);

                }

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

                }

            };

            saxParser.parse(filename, handler);


XML被简单地构造为具有许多属性的行:

<row Id="29621" "postTypeID=1" AcceptedAnswer...>


上面代码的输出很简单:

End Element :row


我尝试将@Override批注添加到defaultHandler内的方法,但是如果我尝试覆盖startElement,它将引发错误。任何人都可以建议如何解决此问题,以及为什么不能覆盖startElement?

最佳答案

如果在添加Override批注时出现错误,则最可能的解释是方法的签名与您要覆盖的方法之一不完全匹配。

Java 8 JavaDocs of the SAX DefaultParser:

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


看起来不错,但可能您使用的是其他版本。

09-03 19:11