Java XML校验API可以通过XSD(XML Schema Definition)校验XML文件内容的合法性。

在以下的案例中使用javax.xml.validation.Validator 类通过一个xsd文件来鉴定XML内容合法性。

以下是我们将要用于校验的xsd文件和xml文件的内容。

Employee.xsd

<?

xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.journaldev.com/Employee"
xmlns:empns="http://www.journaldev.com/Employee" elementFormDefault="qualified"> <element name="empRequest" type="empns:empRequest"></element> <element name="empResponse" type="empns:empResponse"></element> <complexType name="empRequest">
<sequence>
<element name="id" type="int"></element>
</sequence>
</complexType> <complexType name="empResponse">
<sequence>
<element name="id" type="int"></element>
<element name="role" type="string"></element>
<element name="fullName" type="string"></element>
</sequence>
</complexType>
</schema>

须要注意的是上面的XSD包括两种根元素。同一时候具有命名空间,以下两种xml文件内容都是合法的:

EmployeeRequest.xml

<?xml version="1.0" encoding="UTF-8"?>
<empns:empRequest xmlns:empns="http://www.journaldev.com/Employee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.journaldev.com/Employee Employee.xsd ">
<empns:id>5</empns:id>
</empns:empRequest>

EmployeeResponse.xml

<?xml version="1.0" encoding="UTF-8"?>
<empns:empResponse xmlns:empns="http://www.journaldev.com/Employee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.journaldev.com/Employee Employee.xsd ">
<empns:id>1</empns:id>
<empns:role>Developer</empns:role>
<empns:fullName>Pankaj Kumar</empns:fullName>
</empns:empResponse>

以下的一个xml文件内容是不满足XSD约束的:

employee.xml

<?xml version="1.0"?

>
<Employee>
<name>Pankaj</name>
<age>29</age>
<role>Java Developer</role>
<gender>Male</gender>
</Employee>

接下来看怎样通过程序来校验这三个xml文件内容是否满足XSD的约束,validateXMLSchema方法接受两个參数,各自是xsd和xml文件的路径,假设xml文件内容是合法的,该方法返回true,否则返回false。

XMLValidation.java

package com.journaldev.xml;

import java.io.File;
import java.io.IOException; import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator; import org.xml.sax.SAXException; public class XMLValidation { public static void main(String[] args) { System.out.println("EmployeeRequest.xml validates against Employee.xsd? "+validateXMLSchema("Employee.xsd", "EmployeeRequest.xml"));
System.out.println("EmployeeResponse.xml validates against Employee.xsd? "+validateXMLSchema("Employee.xsd", "EmployeeResponse.xml"));
System.out.println("employee.xml validates against Employee.xsd? "+validateXMLSchema("Employee.xsd", "employee.xml")); } public static boolean validateXMLSchema(String xsdPath, String xmlPath){ try {
SchemaFactory factory =
SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new File(xsdPath));
Validator validator = schema.newValidator();
validator.validate(new StreamSource(new File(xmlPath)));
} catch (IOException | SAXException e) {
System.out.println("Exception: "+e.getMessage());
return false;
}
return true;
}
}

执行上面程序。控制台输出:

EmployeeRequest.xml validates against Employee.xsd?

true
EmployeeResponse.xml validates against Employee.xsd? true
Exception: cvc-elt.1: Cannot find the declaration of element 'Employee'.
employee.xml validates against Employee.xsd? false

最新文章

  1. Hive创建表格报【Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException】引发的血案
  2. ASP.NET MVC中Controller返回值类型ActionResult
  3. POJ:最长上升子序列
  4. HDU 3853-loop(概率dp入门)
  5. python challenge第1关--NoteBook上的“乱码”
  6. android 基于百度地图api开发定位以及获取详细地址
  7. DW一些快捷键的使用
  8. C# ORM—Entity Framework 之Code first(代码优先)(二)
  9. JQuery UI 精品UI推荐
  10. SharePoint 2010 升级到2013时间 为了确保用户可以连接,但无法改变升级数据
  11. 【Stackoverflow好问题】java在,如何推断阵列Array是否包括指定的值
  12. HDU 5860 Death Sequence
  13. JDBC连接(MySql)数据库步骤,以及查询、插入、删除、更新等十一个处理数据库信息的功能
  14. Python beautifulsoup 中文乱码
  15. iOS 关于文件的操作
  16. BZOJ 3192: [JLOI2013]删除物品(树状数组)
  17. Python爬虫:更加优雅的执行JavaScript(PyV8)
  18. PHP变量的值类型和引用类型
  19. 2018年牛客网NOIP赛前训练营游记
  20. PCL 库存在vtk的问题导致libproj.so链接错误

热门文章

  1. db2部署
  2. js斐波那契数列求和
  3. Codeforces 528A Glass Carving STL模拟
  4. [BZOJ5305][HAOI2018]苹果树 组合数学
  5. 【理论基础】ContentProvider的简要概述
  6. 将本地的代码上传到网上SVN库
  7. jquery中prop()方法和attr()方法
  8. OPENCV(7) &mdash;&mdash; HighGUI
  9. Atcoder B - Moderate Differences
  10. VBA关闭工作簿和退出Excel