1

我的 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 表示,如 <,但对于字符串比较可能会很棘手......

4

2 回答 2

3

使用实体引用:在您的 XML 文档中替换<&lt;和等。然后,您的 XML 解析器将处理实际字符与其实体引用之间的转换。也就是说,在您的代码中,您会得到实际的or字符。>&gt<>

于 2010-04-21T09:37:24.067 回答
0

您需要转义特殊的 XML 实体,如<, >, ", &lt;,&gt;&quote;

于 2010-04-21T09:40:37.790 回答