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

Я пытаюсь проанализировать строку, содержащую содержимое 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?

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

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

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

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

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

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

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

1 голос
/ 06 марта 2012

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

...