`

利用xsd校验xml

 
阅读更多

package com;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import javax.xml.XMLConstants;
import javax.xml.stream.FactoryConfigurationError;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
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.apache.axiom.om.OMElement;
import org.apache.axiom.om.impl.builder.StAXOMBuilder;
import org.xml.sax.SAXException;

public class validateXML {

	/**
	 * XSD和XML文件放在工程的bin路径下
	 */
	public static boolean validate(String schemaLocaltion, OMElement request)
			throws SAXException, IOException {
		// 获取Schema工厂类
		// 这里的XMLConstants.W3C_XML_SCHEMA_NS_URI的值就是://http://www.w3.org/2001/XMLSchema
		SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
		// 获取XSD文件,以流的方式读取到Source中
		// XSD文件的位置相对于类文件位置
		Source schemaSource = new StreamSource(new FileInputStream(schemaLocaltion));

		Schema schema = factory.newSchema(schemaSource);
		// 这里是将一个DOM树对象转换成流对象,以便对DOM树对象验证
		// 如果是对XML文件进行验证,用FileInputStream即可
		String input = request.toString();
		ByteArrayInputStream bais = new ByteArrayInputStream(
				input.getBytes("UTF-8"));
		// 获取验证器,验证器的XML Schema源就是之前创建的Schema
		Validator validator = schema.newValidator();

		Source source = new StreamSource(bais);
		// 执行验证
		try {
			validator.validate(source);
			return true;
		} catch (Exception ex) {
			ex.printStackTrace();
			return false;
		} finally {
			bais.close();
		}
	}

	/**
	 * get OMElement soap request from specified XML file.
	 * 
	 * @param request
	 * @return
	 * @throws FileNotFoundException
	 * @throws XMLStreamException
	 * @throws FactoryConfigurationError
	 */
	public static OMElement getRequest(String filePath)
			throws FileNotFoundException, XMLStreamException,
			FactoryConfigurationError {
		XMLStreamReader reader = XMLInputFactory.newInstance()
				.createXMLStreamReader(
						new FileInputStream(new File(filePath)));
		StAXOMBuilder builder = new StAXOMBuilder(reader);
		OMElement requestMessage = builder.getDocumentElement();
		return requestMessage;
	}

	public static void main(String[] args) {
		try {
			if (validate("c:\\Person.xsd", getRequest("c:\\Person.xml"))) {
				System.out.println("customer_err.xml格式良好");
			} else {
				System.out.println("customer_err.xml格式有误,请检查!");
			}
		} catch (Exception ex) {
			ex.printStackTrace();
			System.out.println("文件格式有误,请检查!");
		}
	}
}

 

 

依赖的包,见附件

分享到:
评论

相关推荐

    XSD使用dom4j校验XML

    接下来,我们来看看如何使用DOM4J来解析和校验XML文档。DOM4J提供了一种简单的方法来加载XML和XSD文件,然后使用Schema类进行校验。以下是一个基本的步骤概述: 1. 加载XSD文件:使用DOM4J的DocumentHelper类的...

    castor解析xml与xsd校验xml

    3. **校验XML**:当使用Castor的`unmarshal()`方法解析XML时,如果启用了XSD校验,Castor会自动检查XML是否符合指定的XSD。如果XML不符合规范,Castor将抛出`MarshalException`。 4. **异常处理**:在代码中,需要...

    前段时间做JAVA XSD校验XML时整理的JAR包

    需要其它工具包的朋友可以留下邮箱,我传其它包

    XML验证器(XSD验证XML)

    XML验证通常有两种方式:DTD(Document Type Definition)验证和XSD(XML Schema Definition)验证。本话题主要关注的是XSD验证。 XSD,即XML Schema,是W3C推荐的一种用于定义XML文档结构和数据类型的规范。相比于...

    Java XSD校验工具

    可以根据XSD校验XML规则

    验证XSD和XML文件的小工具

    验证xml文件与xsd是否匹配

    前段时间做XSD校验XML文件时整理的JAR包

    我只上传了不容易找到的,有需要其它包的朋友可以留下邮箱,我给传

    XSD校验工具

    传入xsd文件和xml文件,校验xml中的错误并给出提示信息

    jsoup 取html信息校验xml数据

    **JSoup库详解及其在HTML信息提取与XML数据校验中的应用** JSoup是一个非常强大的Java库,专门用于处理和解析HTML文档。它提供了一种简单而直观的方式来抓取、解析、修改以及清理HTML内容。JSoup的核心在于它能够...

    XML校验工具,可以用来进行XML合法性检验

    - **XSD(XML Schema Definition)校验**:通过XSD文件来校验XML文档的结构和内容是否符合预期。 - **Relax NG校验**:使用Relax NG语法来校验XML文档的结构。 - **Schematron校验**:通过Schematron规则来校验XML...

    根据xsd排序xml

    之前做一个开发项目,要校验xml报文合法性,根据Schema使用javax.xml.validation.Validator倒是能验证XML,但是要求是顺序一致才行,一直没找到合适的排序,就自己写了一个排序代码,根据xsd规范文件给xml排序,有...

    Java通过XML Schema校验XML

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

    go-xsd-validate:基于libxml2的go的Xsd验证

    该软件包的目标是将xsd文件预加载到内存中,并使用libxml2(快速)验证xml,例如xml服务端点或api路由器的后主体。 在撰写本文时,我在github上找到的类似软件包没有提供错误详细信息,或者卡在了负载下。 除了提供...

    xml配置文件 dubbo.xsd

    dubbo在xml中配置后中无法读取到dubbo.xsd,dubbo xml配置文件,xsd校验文件。

    使用XSD校验Mybatis的SqlMapper配置文件的方法(1)

    要扩展SqlSessionFactoryBean以支持XSD校验,我们可以创建一个新的类`SchemaSqlSessionFactoryBean`,继承重构后的SqlSessionFactoryBean。这个新类将包含对XSD校验的支持。在XML配置文件中,我们将...

    非常简单实用的XML验证器

    非常简单实用的XML验证器

    自动生成xsd所需的jar包

    参数`a.xml`是输入的XML文件,这个文件可能包含了XML文档结构的信息,`a.xsd`则是输出的XSD文件,即我们希望生成的目标校验文件。 TRANG的工作原理是解析输入的XML文件,分析其结构,然后生成对应的XSD文件。这样...

    exalt:Sublime Text 3插件,用于验证和格式化XML文档

    Exalt是插件,用于验证和格式化XML文档。 注意:您可能还想签出 。 屏幕截图中的主题为 。 产品特点 快速验证文件 使用以下验证机制使用即时验证XML,XHTML和XSLT文件: (DTD) (XSD) (RNG) Exalt通过支持...

    xmlValidate.rar

    XML文档的结构严谨,为了确保其正确性和有效性,通常会使用XML校验工具来验证XML文档是否符合预定义的XML Schema(XSD)规范。"xmlValidate.rar" 是一个压缩包,包含了XML校验相关的工具和资源,便于用户进行XML报文...

Global site tag (gtag.js) - Google Analytics