Как я могу разобрать XML, который соответствует спецификации 1.1, используя Java и Xerces?

Я пытаюсь проанализировать строку, содержащую содержимое XML, соответствующее спецификации XML 1.1. XML содержит ссылки на символы, которые не разрешены в спецификации XML 1.0, но разрешены в спецификации XML 1.1 (ссылки на символы, которые преобразуются в символы Unicode в диапазоне от U+0001 до U+001F).

Согласно веб-сайту Xerces2, синтаксический анализатор Xerces2 поддерживает синтаксический анализ документов XML 1.1. Однако я не могу понять, как сообщить ему, что XML, который мы пытаемся проанализировать, содержит XML, совместимый с 1.1.

Я использую DocumentBuilder для анализа XML (что-то вроде этого):

public Element parseString(String xmlString) {
    try {
          DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
          DocumentBuilder documentBuilder = dbf.newDocumentBuilder();

          InputSource source = new InputSource(new StringReader(xmlString));

      // Throws org.xml.sax.SAXParseException becuase of the invalid character refs
          Document doc = documentBuilder.parse(source);

          return doc.getDocumentElement();

    } catch (ParserConfigurationException pce) {
          // Handle the error
    } catch (SAXException se) {
          // Handle the error
    } catch (IOException ioe) {
          // Handle the error
    }
}

Я попытался установить заголовок XML, чтобы указать, что XML соответствует спецификации 1.1...

xmlString = "<?xml version=\"1.1\" encoding=\"UTF-8\" ?>" + xmlString;

... но он по-прежнему анализируется как 1.0 XML (все еще генерирует исключения недопустимых ссылок на символы).

Как настроить синтаксический анализатор Xerces для анализа XML как XML 1.1? Существует ли альтернативный парсер, обеспечивающий лучшую поддержку XML 1.1?


person Jim Hurne    schedule 16.02.2012    source источник


Ответы (2)


см. здесь список всех функций, поддерживаемых xerces. Может быть ниже 2 функций, которые вы должны включить.

http://xml.org/sax/features/unicode-normalization-checking

Верно: Выполните проверку нормализации Unicode (как описано в разделе 2.13 и Приложении B Рекомендации XML 1.1) и сообщите об ошибках нормализации.

False: не сообщать об ошибках нормализации Unicode.

http://xml.org/sax/features/xml-1.1

Верно: синтаксический анализатор поддерживает как XML 1.0, так и XML 1.1.
Неверно: синтаксический анализатор поддерживает только XML 1.0.
Доступ: только для чтения Начиная с: Xerces-J 2.7.0 Примечание. Значение этой функции будет зависеть от известно ли, что конфигурация синтаксического анализатора, принадлежащая синтаксическому анализатору SAX, поддерживает XML 1.1.

person Aravind Yarram    schedule 16.02.2012

Не знаю, как это сделать с помощью Xerces, но Woodstox поддерживает XML 1.1 "из коробки". Хотя это прежде всего анализатор Stax, он также реализует SAX API (начиная с версии 3.2).

person StaxMan    schedule 05.03.2012