Java, UnmarshallingException, вызванное атрибутом XML со специальными символами:; èè + òàù - <^ èç ° § _>! £ $% & / () =? ~ `'#; - PullRequest
1 голос
/ 21 апреля 2010

В моем xml-файле есть тег с атрибутом "containsValue", который содержит "специальные" символы, которые вы можете видеть в теме:

<original_msg_body id="msgBodySpecialCharsRule" containsValue=";ìè+òàù-<^èç°§_>!£$%&/()=?~`'#;" />

в моей XML-схеме атрибут содержит xs: string:

<xs:attribute name="containsValue" type="xs:string"  />

Я использую это значение в программном обеспечении Java, которое проверяет, содержится ли это значение в другой строке.

но я всегда получаю это исключение:

javax.xml.bind.UnmarshalException
 - with linked exception:
[org.xml.sax.SAXParseException: The value of attribute "containsValue" associated with an element type "original_msg_body" must not contain the '<' character.]

Как я могу решить это? Я попытался изменить тип атрибута на xs: NMTOKEN, но я получаю то же исключение. Есть ли другой тип?

Я думаю, что я мог бы изменить кодировку символов, например, используя представление HTML, например <, но это может быть сложнее для сравнения строк ... </p>

Ответы [ 2 ]

3 голосов
/ 21 апреля 2010

Используйте ссылки на сущности: замените < на &lt; и > на &gt и т. Д. В XML-документе. Ваш анализатор XML будет обрабатывать преобразование между реальным символом и ссылкой на его сущность. То есть, в вашем коде вы получаете фактический < или > символ.

0 голосов
/ 21 апреля 2010

Вам нужно экранировать специальные XML-сущности, такие как <, >, " с &lt;, &gt;, &quote;

...