Я столкнулся с непредвиденной ошибкой при синтаксическом анализе документа XML-in-XML, который использует CDATA. Кажется, я исправил проблему, удалив пробел и комментарий раньше, но внутри того же тега, что и данные CDATA. Почему это происходит?
Не работает:
<?xml version="1.0" encoding="UTF-8"?>
<ValidationRequest>
<XMLDocument>
<!-- The XML to check is placed here in CDATA -->
<![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<Order>
<!-- Order example -->
<ID>123</cbc:ID>
</Order>]]>
</XMLDocument>
</ValidationRequest>
Работает:
<?xml version="1.0" encoding="UTF-8"?>
<ValidationRequest>
<XMLDocument><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<Order>
<!-- Order example -->
<ID>123</cbc:ID>
</Order>]]>
</XMLDocument>
</ValidationRequest>
Я десериализирую (внешний) объект XML, используя Джексона, где атрибут XMLDocument десериализуется как тип String, для дальнейшей обработки. Я проверяю это по схеме, подающей строку XML в качестве входного потока.
Это часть аннотации десериализации об этом элементе:
@XmlRootElement(name = "ValidationRequest")
public class ValidationRequest {
@XmlElement(name="XMLDocument")
public String xmlDocument;
...
Я ожидаю, что оба будут работать, но первый пример дал следующую ошибку.
ParseError at [row,col]:[4,8]
Message: The processing instruction target matching "[xX][mM][lL]" is not allowed.
Второй пример работает, но мой вопрос - почему?