java - XSD 中的模式验证是否不同?
问题描述
我正在尝试使用以下模式通过 XSD 模式验证来验证 XML 元素,但它不起作用。所需的行为是允许除模式表达式中提到的字符之外的所有字符。
<xsd:pattern value="^[^><{}|^`\[\]\\\\]*$"/>
Valid data : TESTING
Invalid data : TE{ST]`I<NG
但是上面的模式也在 XSD 中给出了有效数据(TESTING)的验证错误,但如果我在 java regualr 表达式匹配包中使用这个模式,同样可以正常工作。请帮忙。
解决方案
与该问题的多个评论和答案中所述不同,实体喜欢>
并且<
可以在 XML Schema 正则表达式中毫无问题地使用。
但是,不支持插入符号 ( ^
) 和美元 ( )等锚点。$
给定以下模式,并从模式中删除锚点:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
<xsd:element name="test" type="test"/>
<xsd:simpleType name="test">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[^><{}|^`\[\]\\\\]*"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
这将正确验证:
<test>testing</test>
虽然这些不会:
<test>{testing</test>
<test>>testing</test>
推荐阅读
- android-studio - 如何从 Android Studio 运行 Spring Boot 服务?
- amazon-web-services - ELB日志解读
- python - 无法使用 Python httplib 访问 IP
- python - 比较属于不同键的字典值
- java - 两种结果的返回语句都缺少返回语句错误
- java - 对 Java 列表进行排序
通过传递一个字符串并将这个字符串放在最后一个索引处 - mysql - Spring Boot 应用程序 - SQLException:无法添加外键约束
- javascript - 尝试使用 Chrome 扩展将 Chrome 重定向到新 URL
- javascript - 检测总滚动距离
- c - Traverse Matrix in adjacent diagonals