我正在尝试使用正则表达式来使用xsd验证xml中的字段。我提出正则表达式来做我想要的,除非文本包含在CDATA标签中,否则禁止使用特殊字符。这是我提出的正则表达式:
<!\[CDATA\[.*?\]\]>|[^<>&]*
当我在http://regexr.com/上测试它以匹配我的模式时效果很好。问题是,当我尝试将其插入simpleType模式限制时,我收到一条错误,说它不是有效的正则表达式。
The value '<!\[CDATA\[.*?\]\]>|[^<>&]*' of the facet 'pattern' is not a valid regular expression.
这是我的xsd代码(请注意,我必须使用<
>
和&
替换正则表达式中的&amp;&lt;&gt;所以它将是有效的xml):< / p>
<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模式中工作的方式,我没有得到。
答案 0 :(得分:0)
通过消除过程,我找到了一个解决方案。首先,我在表达式<!\[CDATA\[.*?\]\]>
部分的某处确定了问题。所以我从表达式中撕掉了这个并慢慢地添加了一些东西,直到我得到同样的错误。造成问题的原因是?
。即使CDATA内部没有任何内容,表达式仍然可以在?
之后运行。
我不确定1)为什么我得到那个模式的人包括它,2)为什么xsd不能在我的模式中允许它?