`
ufopw
  • 浏览: 163672 次
  • 性别: 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均是通过字符串作为参数,可以改造为适合自己场景的格式。
分享到:
评论

相关推荐

    根据xml schema生成xml

    2. **验证XML文档**:使用XML解析器或者XML Schema处理器(如Java的JAXB、Apache XMLBeans等)来检查XML文档是否符合XSD的定义。验证过程能发现并报告不符合规范的元素或属性。 3. **根据XML Schema生成XML**:在...

    Java通过XML Schema校验XML

    ### Java通过XML Schema校验XML #### 背景与挑战 XML(可扩展标记语言)作为一种标准的数据交换格式,在Web服务、配置文件以及其他多种应用领域有着广泛的应用。随着XML的普及,对于XML数据有效性的校验变得越来越...

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

    在Java中,XML Schema(XSD)用于定义和验证XML文档的结构和数据类型,确保文档遵循特定的规范。XML Schema文档使用XML语法定义了一系列规则,这些规则描述了有效XML文档应该具有的元素、属性、数据类型以及它们之间...

    java中Dom验证XMl文件合法非法

    总结来说,Java中的DOM解析器配合XML Schema Factory可以有效地验证XML文件的合法性,通过捕获解析异常和检查返回的`Document`对象来判断验证结果。同时,注意性能优化和安全防护,避免潜在的攻击风险。

    XML Schema教程

    - **在应用程序中使用 XML Schema**:XML Schema 可以用于验证 XML 数据的有效性,确保其符合预期的结构和格式要求。 #### 四、XML Schema 标准 - **XML Schema 是 W3C 标准**:XML Schema 在 2001 年成为了万维网...

    XML详解----Schema(精讲)

    * 文档验证:XML Schema可以用于验证XML文档的正确性,确保文档符合预定义的结构和内容。 * 数据存储:XML Schema可以用于定义数据存储的格式和结构,确保数据的正确性和一致性。 XML Schema的优点: * 提高数据...

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

    在Java中实现XML Schema验证文件,主要是为了确保XML文档遵循预定义的结构和规则,从而保证数据的正确性和一致性。XML Schema(XSD)是一种用于定义XML文档结构和数据类型的规范,它提供了比DTD(Document Type ...

    XML文件XML Schema.docXML Schema.doc

    在Java中,XML Schema的验证可以使用javax.xml.validation包,提供了独立于模式语言的验证服务接口。该包提供了三个类来验证文档:SchemaFactory、Schema和Validator。 在实际应用中,XML Schema可以用于: 1. ...

    XSD根据xml生成schema文件

    在实际应用中,XSD不仅可以帮助我们验证XML文档,还可以用于生成Java类、WSDL服务定义等,极大地提升了XML在各种应用场景下的可操作性。对于开发人员来说,理解和掌握XSD是提高工作效率和代码质量的重要技能。 通过...

    xml dom,sax解析,schema验证

    在进行XML Schema验证时,首先需要创建一个SchemaGrammar对象来加载XSD文件,然后使用SchemaValidator设置这个模式,并将XML文档解析器关联到验证器。解析XML文件时,验证器会根据XSD规则检查每个元素和属性,若有...

    XmlSchema-1.4.7.jar

    XML Schema是XML的一种规范,定义了如何验证XML文档的结构和数据类型,确保数据的准确性和一致性。 XML Schema(XSD)标准是用来定义XML文档的结构和数据类型的,它比早期的DTD(Document Type Definition)提供了...

    XmlSchema-1.4.6.jar

    `Validator` 对象则可以用来验证XML文档是否符合该Schema。`XmlSchema-1.4.6.jar` 库可能包含了更高级的功能,如更高效的数据类型映射、错误处理以及对复杂XML Schema的支持。 开发Web服务客户端时,理解XML Schema...

    xmlschema-core-2.0.3的jar

    2. **验证XML文档**:通过编译的XSD模型,可以验证XML文档是否符合定义的模式,确保数据的有效性。 3. **类型转换**:XML Schema定义了丰富的数据类型,库提供了将XML数据转换为Java对象,以及反之的功能。 4. **...

    java生成xsd,xml示例

    在Java开发中,XML(可扩展标记语言)和XSD(XML Schema定义)是常见的数据交换格式和技术。XML用于结构化数据的存储和传输,而XSD则为XML文档提供了语义验证的规则。本教程将详细介绍如何在Java环境中生成XML和XSD...

    用java读取修改xml文件的代码实现

    Java还提供了处理XML Schema(XSD)的能力,可以验证XML文档是否符合特定的模式。`javax.xml.validation`包包含了所需的工具,如`SchemaFactory`和`Validator`。 在实际应用中,选择合适的解析器取决于XML文件的...

    XMLSchema.chm

    5. **约束和验证**:XML Schema提供了强大的约束机制,包括最大出现次数、最小出现次数、长度、模式匹配等,这些约束用于验证XML文档是否符合Schema的规定。验证过程可以帮助捕获错误,确保数据的准确性和完整性。 ...

    JSON Schema 校验库——json-schema-validator(java版本).rar

    4. **与其他框架的集成**:库可以方便地与Spring、Jackson、Gson等Java JSON处理框架集成,使得在整个应用程序中实现JSON Schema验证变得简单。 5. **性能优化**:虽然JSON Schema验证可能涉及复杂的递归和规则检查...

    Java and XML(英文第三版)_java_xml_birdsolc_源码

    10. **XML Schema**:XML Schema定义了XML文档的结构和数据类型,是验证XML文档是否合法的重要工具。 通过学习本书,读者可以掌握Java与XML的集成技巧,理解如何利用Java API处理XML文档,以及如何构建和消费Web...

    西工大服务计算实验2-1_XML Schema

    通过这些库,你可以加载XML Schema文件,验证XML文档是否符合Schema定义,也可以根据Schema生成XML文档。 标签"SOA"提示我们,这个实验可能与Service-Oriented Architecture(面向服务架构)有关。在SOA中,XML和...

    XML文档约束之Schema

    XML(Extensible Markup Language)是一种用于标记数据的语言,它允许用户自定义标签来表示数据,因此在各种领域,如Web服务、数据交换、配置文件等...对于处理复杂的数据交换和验证场景,XML Schema是不可或缺的工具。

Global site tag (gtag.js) - Google Analytics