Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Не происходить событие при парсинге XML


Автор: Proger89 17.7.2010, 15:39
Доброго времени суток.
Мне необходимо при помощи 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). И все примеры которые я нашел на винграде и в инете содержат именно такой код
В чем же дело? Как мне добится работоспособности  этого кода?
Заранее благодарен

Автор: rygel 17.7.2010, 16:14
потому что ты у тебя класс Attributes импортится из пакета java.util.jar , а не  из org.xml.sax

Автор: Proger89 17.7.2010, 22:20
Цитата(rygel @ 17.7.2010,  16:14)
потому что ты у тебя класс Attributes импортится из пакета java.util.jar , а не  из org.xml.sax

Спасибо... Не заметил такой глупой оплошности.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)