值在模式方面不是有效的
Value is not facet-valid with respect to pattern
我在 XSD 中有这个元素:
<xs:simpleType name="elementWithAsterisks">
<xs:restriction base="xs:string">
<xs:length value="16"/>
<xs:pattern value="^[0-9*]*$"/>
</xs:restriction>
</xs:simpleType>
该元素的值可以是数字,也可以是数字加星号,长度必须为16个字符。例如,以下字符串应该是有效的:
**1234567****01456**
**1234567890654321**
1***************
如果我向该元素发送这样的值,XStream returns 这条消息:
cvc-pattern-valid: Value '1234567****01456' is not facet-valid with
respect to pattern '^[0-9*]*$' for type 'elementWithAsterisks'.
我正在使用 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 就会按预期工作:
<xs:pattern value="[0-9*]*"/>
我在 XSD 中有这个元素:
<xs:simpleType name="elementWithAsterisks">
<xs:restriction base="xs:string">
<xs:length value="16"/>
<xs:pattern value="^[0-9*]*$"/>
</xs:restriction>
</xs:simpleType>
该元素的值可以是数字,也可以是数字加星号,长度必须为16个字符。例如,以下字符串应该是有效的:
**1234567****01456**
**1234567890654321**
1***************
如果我向该元素发送这样的值,XStream returns 这条消息:
cvc-pattern-valid: Value '1234567****01456' is not facet-valid with respect to pattern '^[0-9*]*$' for type 'elementWithAsterisks'.
我正在使用 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 就会按预期工作:
<xs:pattern value="[0-9*]*"/>