Доброго времени суток. Мне необходимо при помощи SAX распарсить XML файл следующего содержания: Код | <?xml version="1.0" encoding="UTF-8"?>
<!-- Document : TranslationFile.xml Created on : July 16, 2010, 9:57 PM Author : proger Description: Purpose of the document follows. -->
<translationFile xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns='http://xml.netbeans.org/schema/TranslationFile' xsi:schemaLocation='http://xml.netbeans.org/schema/TranslationFile TranslationFile.xsd'> <text> <originalPhrase>File</originalPhrase> <translatedPhrase>Файл</translatedPhrase> </text> <text> <originalPhrase>Settings</originalPhrase> <translatedPhrase>Настройки</translatedPhrase> </text> <text> <originalPhrase>About</originalPhrase> <translatedPhrase>О программе</translatedPhrase> </text>
</translationFile>
|
Я написал следующую заготовку XML парсера: Код | /* * To change this template, choose Tools | Templates * and open the template in the editor. */
package Translation;
import Other.ParsingFileException; import java.io.File; import java.io.IOException; import java.util.Hashtable; import java.util.jar.Attributes; import java.util.logging.Level; import java.util.logging.Logger; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler;
/** * * @author proger */ class TranslationFileParser extends DefaultHandler { private String _fileName; private Hashtable<String, String> _translationTable;
public TranslationFileParser(String fileName) { _fileName = fileName; _translationTable = new Hashtable<String, String>(); }
public Hashtable<String, String> parse() throws IOException, ParsingFileException { SAXParserFactory factory = SAXParserFactory.newInstance(); try { SAXParser saxParser = factory.newSAXParser(); saxParser.parse(new File(_fileName), this);
} catch (IOException ex) { Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).log(Level.SEVERE, "Error opening file: " + _fileName, ex); throw ex; } catch (ParserConfigurationException ex) { Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).log(Level.SEVERE, "Parser configuration exception", ex); throw new ParsingFileException(ex.getMessage()); } catch (SAXException ex) { Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).log(Level.SEVERE, "Error during parsing file: " + _fileName, ex); throw new ParsingFileException(ex.getMessage()); } catch (Exception ex) { ex.printStackTrace(); }
return _translationTable; }
/** Start document. */
public void startDocument() { System.out.println("<?xml version=\"1.0\"?>"); } // startDocument()
/** Start element. */
/** Start element. */ public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { System.out.println("<" + name + ">"); }
// receive notification of the end of an element
public void endElement (String uri, String name, String qName) { System.out.println("</" + qName + ">"); } }
|
Однако в результате получается следующий вывод: Код | <?xml version="1.0"?> </originalPhrase> </translatedPhrase> </text> </originalPhrase> </translatedPhrase> </text> </originalPhrase> </translatedPhrase> </text> </translationFile>
|
То есть метод startElement не вызывается.... Если я пытаюсь перед этим методом поставить атрибут @Override, то компилятор ругается, что такого метода нет у родительского класса. Но это странно, потому что он там есть (об этом говорит javadoc и NetBeans). И все примеры которые я нашел на винграде и в инете содержат именно такой код В чем же дело? Как мне добится работоспособности этого кода? Заранее благодарен
|