Учитываются ли символы внутри одного тега, но до тега CDATA? - PullRequest
0 голосов
/ 15 апреля 2019

Я столкнулся с непредвиденной ошибкой при синтаксическом анализе документа 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.

Второй пример работает, но мой вопрос - почему?

...