2010-07-20 3 views
0

Возможно, это вопрос n00b.Sax Parser: processingInstruction() не называется

Я пытаюсь разобрать XML-файл, как это:

<?xml version="1.0" encoding="UTF-8" ?> 
<test> 
    <a></a> 
</test> 

со следующим кодом:

public static void parse(File f) { 
    final DefaultHandler handler = new DefaultHandler() { 
     @Override 
     public void processingInstruction(String target, String data) throws SAXException { 
      System.out.println("Processing Instruction"); 
     } 
    }; 
    SAXParserFactory.newInstance().newSAXParser().parse(f, handler); 
} 

Я ожидаю, что выход "Processing Instruction" для печати на стандартный вывод. Но этого не происходит. Может кто-нибудь сказать мне, почему?

ответ

1

От JavaDoc:

SAX-анализатор никогда не должен сообщать декларацию XML (XML 1.0, раздел 2.8) или текстовое объявление (XML 1.0, раздел 4.3.1), используя этот метод.

Как я понимаю, линия <?xml version="1.0" encoding="UTF-8" ?> не будет сообщаться/улавливаться этим методом. Попробуйте добавить еще одну команду обработки в код xml и снова подать ее в парсер.

+0

Спасибо за ответ. Другой вопрос: можно ли узнать, существует ли в файле допустимое объявление xml? – Martin

+0

@Martin: ISTR, что он выдаст исключение, если объявление недействительно. –

+0

Другими словами, объявление xml не является инструкцией обработки и не должно быть сообщено синтаксическим анализатором как единое целое. –