2012-02-16 2 views
3

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

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

Я использую 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

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

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

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

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

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