我正在尝试针对定义的XSD实现XML的基本验证 XML:
<Employee type="permanent">
<Name>John</Name>
<employeeId>9000</employeeId>
<Age>28</Age>
<dateOfBirth>28/12/2000</dateOfBirth>
<city>Vancouver</city>
<salary>120000</salary>
</Employee>
XSD:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Employee">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string"></xs:element>
<xs:element name="employeeId" type="xs:int"></xs:element>
<xs:element name="Age" type="xs:int"></xs:element>
<xs:element name="dateOfBirth" type="xs:date"></xs:element>
<xs:element name="city" type="xs:string"></xs:element>
<xs:element name="salary" type="xs:int"></xs:element>
</xs:sequence>
<xs:attribute name="type" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>
但是当我运行验证器时:
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new File(schemaPath));
Validator validator = schema.newValidator();
validator.setErrorHandler(new BasicErrorHandler());
validator.validate(new StreamSource(new File(xmlPath)));
我一直收到以下错误:
cvc-datatype-valid.1.2.1: '12/28/2000' is not a valid value for 'date'.
cvc-type.3.1.3: The value '12/28/2000' of element 'dateOfBirth' is not valid.
现在,当我尝试在SO和Google上搜索解决方案时,我发现了这一点:
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="testdate" type="zsdate"/>
<xs:element name="testtime" type="zstime"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="zsdate">
<xs:restriction base="xs:date">
<xs:pattern value="^(0[1-9]|[12][0-9]|3[01]).(0[1-9]|1[012]).(19|20)\d\d$"/>
</xs:restriction>
</xs:simpleType>
我不想将数据类型转换为字符串并针对正则表达式进行验证。我的日期将始终采用dd / mm / yyyy格式。它是用上面粘贴的XML编写的。
我有什么遗失的东西吗?
P.S。当我使用以下内容时:
<dateOfBirth>2012-08-22</dateOfBirth>
它工作正常。
答案 0 :(得分:2)
<xs:date>
必须采用YYYY-MM-DD
格式。所以要么你这样写,要么你用正则表达式<xs:string>
。