Java XML 验证 API 可用于在 Java 程序中对 XML 进行 XSD 验证。 javax.xml.validation.Validator
类用于在 Java 中对 xml 进行 xsd 验证。
验证 XML 对 XSD
Here are the sample XSD and XML files used.
Employee.xsd
1<?xml version="1.0" encoding="UTF-8"?>
2<schema xmlns="https://www.w3.org/2001/XMLSchema"
3targetNamespace="https://www.journaldev.com/Employee"
4xmlns:empns="https://www.journaldev.com/Employee" elementFormDefault="qualified">
5
6 <element name="empRequest" type="empns:empRequest"></element>
7
8 <element name="empResponse" type="empns:empResponse"></element>
9
10 <complexType name="empRequest">
11 <sequence>
12 <element name="id" type="int"></element>
13 </sequence>
14 </complexType>
15
16 <complexType name="empResponse">
17 <sequence>
18 <element name="id" type="int"></element>
19 <element name="role" type="string"></element>
20 <element name="fullName" type="string"></element>
21 </sequence>
22 </complexType>
23</schema>
请注意,上面XSD包含两个根元素和名称空间,我也创建了两个样本(使用Eclipse使用XSD的XML文件)(/community/tutorials/generate-xml-xsd-eclipse-java)。
1<?xml version="1.0" encoding="UTF-8"?>
2<empns:empRequest xmlns:empns="https://www.journaldev.com/Employee" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://www.journaldev.com/Employee Employee.xsd ">
3 <empns:id>5</empns:id>
4</empns:empRequest>
员工响应.xml
1<?xml version="1.0" encoding="UTF-8"?>
2<empns:empResponse xmlns:empns="https://www.journaldev.com/Employee" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://www.journaldev.com/Employee Employee.xsd ">
3 <empns:id>1</empns:id>
4 <empns:role>Developer</empns:role>
5 <empns:fullName>Pankaj Kumar</empns:fullName>
6</empns:empResponse>
下面是另一个 XML 文件,没有确认到Employee.xsd
。
1<?xml version="1.0"?>
2<Employee>
3 <name>Pankaj</name>
4 <age>29</age>
5 <role>Java Developer</role>
6 <gender>Male</gender>
7</Employee>
以下是用于对XSD的所有三个XML文件进行验证的程序。通过validateXMLSchema
方法将XSD和XML文件作为参数并返回 true,如果验证成功或返回 false。
1package com.journaldev.xml;
2
3import java.io.File;
4import java.io.IOException;
5
6import javax.xml.XMLConstants;
7import javax.xml.transform.stream.StreamSource;
8import javax.xml.validation.Schema;
9import javax.xml.validation.SchemaFactory;
10import javax.xml.validation.Validator;
11
12import org.xml.sax.SAXException;
13
14public class XMLValidation {
15
16 public static void main(String[] args) {
17
18 System.out.println("EmployeeRequest.xml validates against Employee.xsd? "+validateXMLSchema("Employee.xsd", "EmployeeRequest.xml"));
19 System.out.println("EmployeeResponse.xml validates against Employee.xsd? "+validateXMLSchema("Employee.xsd", "EmployeeResponse.xml"));
20 System.out.println("employee.xml validates against Employee.xsd? "+validateXMLSchema("Employee.xsd", "employee.xml"));
21
22 }
23
24 public static boolean validateXMLSchema(String xsdPath, String xmlPath){
25
26 try {
27 SchemaFactory factory =
28 SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
29 Schema schema = factory.newSchema(new File(xsdPath));
30 Validator validator = schema.newValidator();
31 validator.validate(new StreamSource(new File(xmlPath)));
32 } catch (IOException | SAXException e) {
33 System.out.println("Exception: "+e.getMessage());
34 return false;
35 }
36 return true;
37 }
38}
上述方案的结果是:
1EmployeeRequest.xml validates against Employee.xsd? true
2EmployeeResponse.xml validates against Employee.xsd? true
3Exception: cvc-elt.1: Cannot find the declaration of element 'Employee'.
4employee.xml validates against Employee.xsd? false
使用Java XML验证API的好处在于,我们不需要对文件进行解析,并且没有使用第三方API。