`
ufopw
  • 浏览: 159894 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

Java基于Schema验证xml

    博客分类:
  • Java
阅读更多
现在基于webservice的接口越来越多,xml格式成为最通用的传输格式,以下代码是通过Schema验证xml格式的示例:
一、XmlValidator工具类
package com.starit.comm.xml;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;

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;

/**
 * @author wpan 2010-09-12 验证xml是否符合格式
 * 
 */
public class XmlValidator {

	public final static String SCHEMA_LANGUAGE = "http://www.w3.org/2001/XMLSchema";

	/**
	 * @param xmlStr
	 * @param xsdStr
	 * @return XmlValidateResult 通过Schema验证指定的xml字符串是否符合结构
	 */
	public static XmlValidateResult validateByXsd(String xmlStr, String xsdStr) {
		// 查找支持指定模式语言的 SchemaFactory 的实现并返回它
		SchemaFactory factory = SchemaFactory
				.newInstance(XmlValidator.SCHEMA_LANGUAGE);
		// 包装待验证的xml字符串为Reader
		Reader xmlReader = new BufferedReader(new StringReader(xmlStr));
		// 保障Schema xsd字符串为Reader
		Reader xsdReader = new BufferedReader(new StringReader(xsdStr));
		// 创建返回值类,默认为失败
		XmlValidateResult vs = new XmlValidateResult();

		try {
			// 构造Schema Source
			Source xsdSource = new StreamSource(xsdReader);
			// 解析作为模式的指定源并以模式形式返回它
			Schema schema = factory.newSchema(xsdSource);

			// 根据Schema检查xml文档的处理器,创建此 Schema 的新 Validator
			Validator validator = schema.newValidator();

			// 构造待验证xml Source
			Source xmlSource = new StreamSource(xmlReader);

			// 执行验证
			validator.validate(xmlSource);
			// 设置验证通过
			vs.setValidated(true);
			return vs;
		} catch (SAXException ex) {
			// 设置验证失败
			vs.setValidated(false);
			// 设置验证失败信息
			vs.setErrorMsg(ex.getMessage());
			return vs;
		} catch (IOException e) {
			// 设置验证失败
			vs.setValidated(false);
			// 设置验证失败信息
			vs.setErrorMsg(e.getMessage());
			return vs;
		}
	}

	/**
	 * @param args0
	 * @throws IOException
	 */
	public static void main(String[] args0) throws IOException {
		File xml = new File("D:/order.xml");
		File xsd = new File("D:/order.xsd");

		BufferedReader xmlBuff = new BufferedReader(new FileReader(xml));
		BufferedReader xsdBuff = new BufferedReader(new FileReader(xsd));

		StringBuffer xmlStr = new StringBuffer();
		String line = null;
		while ((line = xmlBuff.readLine()) != null) {
			xmlStr.append(line);
			xmlStr.append("\n");
		}
		xmlBuff.close();

		StringBuffer xsdStr = new StringBuffer();
		line = null;
		while ((line = xsdBuff.readLine()) != null) {
			xsdStr.append(line);
		}
		xsdBuff.close();

		XmlValidateResult vs = XmlValidator.validateByXsd(xmlStr.toString(),
				xsdStr.toString());
		if (vs.isValidated()) {
			System.out.println("验证成功!");
		} else {
			System.out.println("验证失败!");
			System.out.println("失败原因:" + vs.getErrorMsg());
			System.out.println("验证xml:\n" + xmlStr.toString());
		}

	}
}

二、验证结果类:
package com.starit.comm.xml;

/**
 * @author wpan Xml验证结果
 */
public class XmlValidateResult {
	// 是否通过验证
	private boolean validated;

	// 错误信息
	private String errorMsg;

	// 构造函数,默认为不通过,错误原因为空字符串
	XmlValidateResult() {
		validated = false;
		errorMsg = "";
	}

	public String getErrorMsg() {
		return errorMsg;
	}

	public void setErrorMsg(String errorMsg) {
		this.errorMsg = errorMsg;
	}

	public boolean isValidated() {
		return validated;
	}

	public void setValidated(boolean validated) {
		this.validated = validated;
	}

}

说明:其中xml和xsd均是通过字符串作为参数,可以改造为适合自己场景的格式。
分享到:
评论

相关推荐

    Java通过XML Schema校验XML

    ava校验XML是件很扯淡的事情,... 下面不扯这些废话了,我用DOM4j结合javaxml api使用XSD来校验一个xml有效性,下面这个例子虽然和蹩脚,但是也费了一番功夫,放出来大家研究吧,有更好的实现也希望能和我一同分享。

    java中实现xmlschema验证文件借鉴.pdf

    java中实现xmlschema验证文件借鉴.pdf

    java中实现xmlschema验证文件参照.pdf

    java中实现xmlschema验证文件参照.pdf

    xml dom,sax解析,schema验证

    xerces-c++ 2.8应用,主要报错xml文件的解析,创建,修改保存。schema验证的。希望对初学者有所帮助.

    Java Web开发详解:XML+DTD+XML Schema+XSLT+Servlet3.0+JSP2.2深入剖析与实例应用/孙鑫编著

    在知识的讲解上,《Java Web开发详解——XML+DTD+XML Schema+XSLT+Servlet3.0+JSP2.2深入剖析与实例应用》采用理论与实践相结合的方式,从程序运行的内部机制进行分析讲解,并通过大量的实例和实验来验证并运用本书...

    基于Java的XML解析与反射设计模式.doc

    基于Java的XML解析与反射设计模式 摘要:随着计算机时代的蓬勃发展,internet的普及给社会以及人民的生活带来了巨 大的影响。与此同时,b/s结构的多系统相互访问技术应时代的发展也如雨后春笋般不断 涌现出来,相应...

    How to validate XML documents against Schematron rules

    The Schematron is a simple and powerful Structural Schema Language for making assertions about patterns found in XML documents. It relies almost entirely on XPath query patterns for defining rules and...

    javaapi源码文档-java-xml-tool:这个Java项目说明了Java提供的XMLAPI的用法:解析和验证XML文档,执行XSL转

    解析和验证XML文档, 执行XSL转换 使用来自XML源的JPA填充数据库。 要求 JDK 1.8 Java项目管理工具maven ,(我使用版本3.5.2): 软件版本控制:git 可选,对于CarRental示例:Postgres 安装 转到您的软件项目所在...

    验证器:使用XML Schema和Schematron验证XML文档

    它基本上按顺序执行以下操作: 识别实际的xml格式验证xml文件(使用架构和schematron规则) 生成定制报告/从xml文件提取定制数据计算接受状态(根据提供的方案和规则) 验证器取决于用于完全配置过程的自定义。...

    xmlspy.2013-patch

    图形的XML编辑和基于文本的XML编辑视图 模式感知的XQuery XQuery编辑器,调试器和XQuery的分析器 革命性的智能修复XML验证自动纠错 XPath的自动完成和XPath分析器窗口 可视化的XML Schema编辑器 数据库集成 ...

    altova-xmlspy-enterprise-2010-v12-3

    图形的XML编辑和基于文本的XML编辑视图 模式感知的XQuery XQuery编辑器,调试器和XQuery的分析器 革命性的智能修复XML验证自动纠错 XPath的自动完成和XPath分析器窗口 可视化的XML Schema编辑器 数据库集成 ...

    症结:命令行XML模式和Schematron验证器

    格式不正确的XML的命令行避难所(CRUX) 对具有Java运行时的任何平台的XML模式和Schematron...使用范例针对本地XML文件执行XML模式验证: crux.jar file.xml针对本地XML文件执行XML Schema验证和Schematron验证: cru

    xsd-validator:根据XML模式验证XML文件

    XSD验证器 根据XML模式(xsd文件)快速轻松地验证XML文件。 需要安装Java。 在Mac和Linux上的用法: ./xsdv.sh test.xsd test.xml ... 注意,该项目只是用于XML Schema验证的标准Java库例程的简单包装。

    XML课程实验报告

    XML知识的详细验证,包括测试所用的JAVA源码等,XML,schema,DTD,Xpath等

    从Java走向Java+EE+.rar

    4.4 用Schema验证XML文档 35 4.4.1 使用XML Schema 35 4.4.2 Schema的语法 37 4.5 用JAXP读写XML 44 4.6 Java EE中的JAXB 55 4.7 小结 64 第5章 使用Java Servlet开发动态网页 65 5.1 Servlet的概念和...

    Java学习指南(第4版)(下册)中文高清完整版PDF

    本书包括以下内容: 学习核心Java语言——基本语法、类和对象以及其他的组件; 用Java进行开发,使用编译器、解释器和其他工具; 介绍Java内建的线程工具和...使用XML和XSLT,包括XML Schema、验证、XPath和XInclude。

    XSDInferencer:XSDInferencer 是一个自动 XML Schema 文档生成工具,它可以从 XML 正例中生成全面且正确的 XSD

    XSD推理器XSDInferencer 是一个自动 XML Schema 生成工具,它自动生成 XSD 文件,一些提供的 XML 正面示例可以根据这些文件进行验证。 它还从该文档的内容中收集统计信息。 通过利用许多常用的 XSD 功能,该工具生成...

    jaxb-ri-2.3.0.zip

    JAXB (Java Architecture for XML Binding) 的主要功能是根据DTD或者XML Schema将XML Element转化为Java类。将XML文本流转化为Java ...简单的来说,它可以让你轻松解析和验证XML内容而不用去写那些繁琐的XML解析代码。

    node-xsd-schema-validator:NodeJS的架构(XSD)验证器

    在后台,该实用程序使用Java进行实际验证。 它假定javac和java在路径上。 如果存在JAVA_HOME环境变量,它将使用它来定位已安装的JDK。 在某些平台上,例如您需要手动定义JAVA_HOME 。 安装 通过安装软件包: npm ...

Global site tag (gtag.js) - Google Analytics