Java 值对于模式无效
我在XSD中有这个元素:Java 值对于模式无效,java,xml,validation,xsd,xstream,Java,Xml,Validation,Xsd,Xstream,我在XSD中有这个元素: <xs:simpleType name="elementWithAsterisks"> <xs:restriction base="xs:string"> <xs:length value="16"/> <xs:pattern value="^[0-9*]*$"/> </xs:restriction> </xs:simpleType> 如果我将这样的值发送到此元素,XStr
<xs:simpleType name="elementWithAsterisks">
<xs:restriction base="xs:string">
<xs:length value="16"/>
<xs:pattern value="^[0-9*]*$"/>
</xs:restriction>
</xs:simpleType>
如果我将这样的值发送到此元素,XStream将返回以下消息:cvc模式有效:值“1234567****01456”对无效 关于类型“elementWithAsterisks”的模式“^[0-9*]*$” 我正在使用Java和XStream。这是我验证它的代码:
try {
File xsdFile = new File("validation.xsd");
SchemaFactory schemaFactory = SchemaFactory.newInstance(SCHEMA_LANGUAGE);
factory.setSchema(schemaFactory.newSchema(xsdFile);
SAXParser saxParser = factory.newSAXParser();
XMLReader reader = saxParser.getXMLReader();
reader.setErrorHandler(new XmlValidationErrorHandler());
reader.parse(new InputSource(inputStream));
isValid = true;
} catch (SAXException | ParserConfigurationException | IOException ex) {
ex.printStackTrace();
isValid = false;
}
XSD中的正则表达式被
^
和$
隐式包围。只需从xs:pattern
中删除显式(冗余)XSD,您的XSD就会按预期工作:
<xs:pattern value="[0-9*]*"/>
<xs:pattern value="[0-9*]*"/>