Java XSD中的模式验证不同吗?
我试图使用下面的模式用XSD模式验证XML元素,但它不起作用。所需的行为是允许除模式表达式中提到的字符外的所有字符Java XSD中的模式验证不同吗?,java,regex,xml,xsd,xsd-validation,Java,Regex,Xml,Xsd,Xsd Validation,我试图使用下面的模式用XSD模式验证XML元素,但它不起作用。所需的行为是允许除模式表达式中提到的字符外的所有字符 <xsd:pattern value="^[^><{}|^`\[\]\\\\]*$"/> Valid data : TESTING Invalid data : TE{ST]`I<NG 有效数据:测试 无效数据:TE{ST]`I与此问题的多个注释和答案中所述的不同,像和这样的实体可以在XML模式正则表达式中使用而不会出现任何问题
<xsd:pattern value="^[^><{}|^`\[\]\\\\]*$"/>
Valid data : TESTING
Invalid data : TE{ST]`I<NG
有效数据:测试
无效数据:TE{ST]`I与此问题的多个注释和答案中所述的不同,像
和
这样的实体可以在XML模式正则表达式中使用而不会出现任何问题
但是,不支持插入符号(^
)和美元($
)等锚点
给定以下模式,从模式中移除锚定:
<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>
{测试
测试
您的角色类可能无效,或者至少没有按照您的想法进行操作。[]
意味着匹配&
,g
,t
,;
中的任何一个。这并不意味着匹配HTML符号
@TimBiegeleisen您不能在XML中使用
文本。需要改用实体。@RobbyCornelissen好的……但该字符类有效吗?我从未见过正则表达式的风格它允许使用多个字符。@TimBiegeleisen该字符类是有效的,并将按预期工作。问题在于^
和$
锚。我每天都会学到一些新东西。^^。因此,解析器可能会在内部将
转换为
,以便在类中使用。