我写了一个简单的XSD,我写的是XSD模式
<xsd:element name="xx">
<xsd:simpleType >
<xsd:restriction base="xsd:string">
<xsd:pattern
value="^[a-z]+">
</xsd:pattern>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
当我使用jaxb执行XML-XSD验证时,始终会遇到XX标记的错误。例如:
<xx>abcd</xx>
我不确定为什么会出现这种奇怪的行为?我希望我的正则表达式是正确的,上面的例子应该通过验证。我错过了什么?
答案 0 :(得分:6)
您需要从表达式中删除锚点^。 XSD验证器无法识别^或$锚点,但将它们解释为文字字符。您可以通过将XML更改为<xx>^abcd</xx>
并根据当前的XSD进行验证来验证这一点。
原因是您的模式自动绑定到字符串的开头和结尾。与尝试匹配值的正则表达式不同,此正则表达式用于验证元素的整个内容,因此您必须创建一个模式以完全匹配字段中显示的所有内容。