【发布时间】:2015-07-17 18:27:19
【问题描述】:
我正在尝试使用正则表达式来使用 xsd 验证我的 xml 中的字段。我想出了正则表达式来做我想做的事情,即禁止特殊字符,除非文本包含在 CDATA 标记中。这是我想出的正则表达式:
<!\[CDATA\[.*?\]\]>|[^<>&]*
当我在 http://regexr.com/ 上测试它以匹配我的模式时效果很好。问题是当我尝试将其插入 simpleType 模式限制时,我收到一条错误消息,指出它不是有效的正则表达式。
The value '<!\[CDATA\[.*?\]\]>|[^<>&]*' of the facet 'pattern' is not a valid regular expression.
这是我的 xsd 代码(请注意,我必须将正则表达式中的 & 替换为 &lt; &gt; 和 &amp; 以便它是有效的 xml):
<xs:element name="description" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="<!\[CDATA\[.*?\]\]>|[^<>&]*"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
所以我认为正则表达式在 xsd 模式中的工作方式有些我没有得到。
【问题讨论】: