Java - 使用 XSD 校验 XML
package com.huey.dream.utils; import java.io.IOException;
import java.io.InputStream; import javax.xml.transform.Source;
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 XSDValidator { static public void validate(InputStream xsdStream, InputStream xmlStream) throws SAXException, IOException {
SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
Source xsdSource = new StreamSource(xsdStream);
Schema schema = schemaFactory.newSchema(xsdSource); Source xmlSource = new StreamSource(xmlStream); Validator validator = schema.newValidator();
validator.validate(xmlSource);
} }
测试。
package com.huey.dream; import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream; import org.junit.Test;
import org.xml.sax.SAXException; import com.huey.dream.utils.XSDValidator; public class XSDValidatorTest { @Test
public void testValidate() throws Exception {
String xsdPath = "files/Books.xsd";
String xmlPath = "files/Books.xml";
InputStream xsdStream = null;
InputStream xmlStream = null; try {
xsdStream = new FileInputStream(xsdPath);
xmlStream = new FileInputStream(xmlPath);
XSDValidator.validate(xsdStream, xmlStream);
System.out.println("Validate successfully.");
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (xsdStream != null) {
xsdStream.close();
}
if (xmlStream != null) {
xmlStream.close();
}
}
} }
XSDValidatorTest.java
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="books">
<xs:complexType>
<xs:sequence>
<xs:element name="book">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="authors">
<xs:complexType>
<xs:sequence>
<xs:element name="author" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="firstName" type="xs:string"/>
<xs:element name="lastName" type="xs:string"/>
<xs:element name="nationality" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="publisher" type="xs:string" minOccurs="0"/>
<xs:element name="publishDate" type="xs:date" minOccurs="0"/>
<xs:element name="isbn" type="xs:string"/>
<xs:element name="price" type="xs:double" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Books.xsd
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<title>HTTP权威指南</title>
<authors>
<author>
<firstName>David</firstName>
<lastName>Gourley</lastName>
</author>
<author>
<firstName>Brian</firstName>
<lastName>Totty</lastName>
</author>
</authors>
<publisher>人民邮电出版社</publisher>
<publishDate>2012-09-01</publishDate>
<isbn>9787115281487</isbn>
<price>109.00</price>
</book>
</books>
Books.xml
Java - 使用 XSD 校验 XML的更多相关文章
- java使用xsd校验xml样例
知识点:XSD文件是指XML结构定义 ( XML Schemas Definition )文件,是DTD的替代品.可以用一个指定的XML Schema来验证某个XML文档,以检查该XML文档是否符合其 ...
- Java&Xml教程(九)Java中通过XSD校验XML合法性
Java XML校验API能够通过XSD(XML Schema Definition)校验XML文件内容的合法性.在下面的案例中使用javax.xml.validation.Validator 类通过 ...
- Java&Xml教程(九)Java中通过XSD校验XML合法性
Java XML校验API可以通过XSD(XML Schema Definition)校验XML文件内容的合法性. 在以下的案例中使用javax.xml.validation.Validator 类通 ...
- C# XSD校验XML文件的代码
/// <summary> /// XSD文件校验XML /// </summary> /// <returns></returns> public A ...
- 检验多个xsd的xml是否合法
Java - 使用 XSD 校验 XML https://www.cnblogs.com/huey/p/4600817.html 这种方法不支持多个xsd文件,会报错 可以使用XMLBeans Too ...
- 使用XSD校验Mybatis的SqlMapper配置文件(2)
编写好XSD文件,然后来看怎么使用XSD文件校验,并解析SqlMapper文件,也就是实现doParseSqlMapperResourceWithSchema()方法. 为了实现这个功能,有两个基本要 ...
- 使用XSD校验Mybatis的SqlMapper配置文件(1)
这篇文章以前面对SqlSessionFactoryBean的重构为基础,先简单回顾一下做了哪些操作: 新建SqlSessionFactoryBean,初始代码和mybatis-spring相同: 重构 ...
- Spring入门(8)-基于Java配置而不是XML
Spring入门(8)-基于Java配置而不是XML 本文介绍如何应用Java配置而不是通过XML配置Spring. 0. 目录 声明一个简单Bean 声明一个复杂Bean 1. 声明一个简单Bean ...
- Spring是如何校验XML的
首先来看下xml的一些概念: xml的schema里有namespace,可以给它起个别名.比如常见的spring的namespace: xmlns:mvc="http://www.spri ...
随机推荐
- leetcode@ [91] Decode Ways (Dynamic Programming)
https://leetcode.com/problems/decode-ways/ A message containing letters from A-Z is being encoded to ...
- HDU-4627 The Unsolvable Problem 简单数学
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4627 对n除个2,然后考虑下奇偶... //STATUS:C++_AC_15MS_228KB #inc ...
- Hash (poj2002-Squares & poj3349-Snowflake Snow Snowflakes)
//突然发现好弱,好多基础的算法竟然都不会,哈希这种经典的算法,我貌似基本没怎么做过相关的题0.0 POJ2002 题意:给n个点,问有多少组四个点能组成正方形. 题解:枚举两个点,通过公式算出另外两 ...
- Java 8 开发顶级技巧
本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 我使用Java 8编码已经有些年头,既用于新的应用程序,也用来迁移现有的应用,感觉是时候写一些我发现的非常有用的 ...
- ERROR: transport error 202: bind failed: Address already in use
早上上班,同事反应服务上不去,后台看了一下,发现tomcat挂掉了,重新启动tomcat时报错. ERROR: transport error 202: bind failed: Address al ...
- 集合框架Map之KeySet方法的使用
package cn.itcast.map; import java.util.HashMap; import java.util.Iterator; import java.util.Map; im ...
- 最简单的计算MD5方法
原来写过一个计算MD5的程序,是用了一个叫MD5.pas的单元,使用起来还算简单,但还有更简单的办法,安装了indy就会有IdHashMessageDigest单元(delphi 7默认安装indy) ...
- stm32 CAN引脚-笔记
默认: CANRX – > PA11 CANTX - >PA12 映射1: CANRX – > PB8 CANTX - >PB9 映射2: CANRX – > ...
- Handlebar
1.Handlebar中文网: http://www.ghostchina.com/introducing-the-handlebars-js-templating-engine/ 2.http:// ...
- 爬去知乎百万用户信息之UserTask
UserTask是获取用户信息的爬虫模块 public class UserManage { private string html; private string url_token; } 构造函数 ...