使用xsd验证xml

XML验证器(XSD验证XML) XML验证器(XSD验证XML)附Delphi7源码 http://blog.youkuaiyun.com/akof1314/article/details/6860264 有介绍 立即下载

之前写的文章利用到了dom4j,而且是单个的xsd验证。但是项目实际需求是xsd中引用了其他的xsd。即有验证结构的,也有验证内容的。

以下是多个xsd联合验证xml的代码,没有用到dom4j,使用的是java自己的API。

代码是同事的朋友给的,不知出处,如果侵犯到了原作者的权益,请联系我。

Anyway,感谢写出代码的同行,帮我解决了问题。


代码写了三个类文件。

SchemaResourceResolver.java

import  java.io.File;  
import  java.io.FileInputStream;  
import  java.io.FileNotFoundException;  
import  java.io.InputStream;  
import  java.io.Reader;  
import  java.net.URI;  
import  java.net.URISyntaxException;  
  
import  org.apache.log4j.Logger;  
import  org.w3c.dom.ls.LSInput;  
import  org.w3c.dom.ls.LSResourceResolver;  
  
/**  
 *   
 * Implement LSResourceResolver to customize resource resolution when parsing schemas.  
 * <p>  
 * SchemaFactory uses a LSResourceResolver when it needs to locate external resources   
 * while parsing schemas, although exactly what constitutes "locating external resources"   
 * is up to each schema language.   
 * </p>  
 * <p>  
 * For example, for W3C XML Schema, this includes files <include>d or <import>ed,   
 * and DTD referenced from schema files, etc.  
 *</p>  
 *  
 */   
class  SchemaResourceResolver  implements  LSResourceResolver {  
  
    private   static   final  Logger log = Logger.getLogger(SchemaResourceResolver. class );  
      
    /**  
     *   
     * Allow the application to resolve external resources.   
     *   
     * <p>  
     * The LSParser will call this method before opening any external resource, including   
     * the external DTD subset, external entities referenced within the DTD, and external   
     * entities referenced within the document element (however, the top-level document   
     * entity is not passed to this method). The application may then request that the   
     * LSParser resolve the external resource itself, that it use an alternative URI,   
     * or that it use an entirely different input source.   
     * </p>  
     *   
     * <p>  
     * Application writers can use this method to redirect external system identifiers to   
     * secure and/or local URI, to look up public identifiers in a catalogue, or to read   
     * an entity from a database or other input source (including, for example, a dialog box).  
     * </p>  
     */   
    public  LSInput resolveResource(String type, String namespaceURI, String publicId, String systemId, String baseURI) {  
        log.info("/n>> Resolving "  +  "/n"   
                          + "TYPE: "  + type +  "/n"   
                          + "NAMESPACE_URI: "  + namespaceURI +  "/n"    
                          + "PUBLIC_ID: "  + publicId +  "/n"   
                          + "SYSTEM_ID: "  + systemId +  "/n"   
                          + "BASE_URI: "  + baseURI +  "/n" );  
          
        String schemaLocation = baseURI.substring(0 , baseURI.lastIndexOf( "/" ) +  1 );  
          
        if (systemId.indexOf( "http://" ) <  0 ) {  
            systemId = schemaLocation + systemId;  
        }  
          
        LSInput lsInput = new  LSInputImpl();  
          
        URI uri = null ;  
        try  {  
            uri = new  URI(systemId);  
        } catch  (URISyntaxException e) {  
            e.printStackTrace();  
        }  
          
        File file = new  File(uri);  
        FileInputStream is = null ;  
        try  {  
            is = new  FileInputStream(file);  
        } catch  (FileNotFoundException e) {  
            e.printStackTrace();  
        }  
          
        lsInput.setSystemId(systemId);  
        lsInput.setByteStream(is);  
          
        return  lsInput;  
    }  
      
    /**  
     *   
     * Represents an input source for data  
     *  
     */   
    class  LSInputImpl  implements  LSInput {  
  
        private  String publicId;  
        private  String systemId;  
        private  String baseURI;  
        private  InputStream byteStream;  
        private  Reader charStream;  
        private  String stringData;  
        private  String encoding;  
        private   boolean  certifiedText;  
          
        public  LSInputImpl() {}  
          
        public  LSInputImpl(String publicId, String systemId, InputStream byteStream) {  
            this .publicId = publicId;  
            this .systemId = systemId;  
            this .byteStream = byteStream;  
        }  
          
        public  String getBaseURI() {  
            return  baseURI;  
        }  
  
        public  InputStream getByteStream() {  
            return  byteStream;  
        }  
  
        public   boolean  getCertifiedText() {  
            return  certifiedText;  
        }  
  
        public  Reader getCharacterStream() {  
            return  charStream;  
        }  
  
        public  String getEncoding() {  
            return  encoding;  
        }  
  
        public  String getPublicId() {  
            return  publicId;  
        }  
  
        public  String getStringData() {  
            return  stringData;  
        }  
  
        public  String getSystemId() {  
            return  systemId;  
        }  
  
        public   void  setBaseURI(String baseURI) {  
            this .baseURI = baseURI;  
        }  
  
        public   void  setByteStream(InputStream byteStream) {  
            this .byteStream = byteStream;  
        }  
  
        public   void  setCertifiedText( boolean  certifiedText) {  
            this .certifiedText = certifiedText;  
        }  
  
        public   void  setCharacterStream(Reader characterStream) {  
            this .charStream = characterStream;  
        }  
  
        public   void  setEncoding(String encoding) {  
            this .encoding = encoding;  
        }  
  
        public   void  setPublicId(String publicId) {  
            this .publicId = publicId;  
        }  
  
        public   void  setStringData(String stringData) {  
            this .stringData = stringData;  
        }  
  
        public   void  setSystemId(String systemId) {  
            this .systemId = systemId;  
        }  
          
    }  
  
}   



XMLParser.java

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;

import org.apache.log4j.Logger;
import org.xml.sax.SAXException;

public final class XMLParser {

	private static final Logger log = Logger.getLogger(XMLParser.class);

	private XMLParser() {
	}

	public static boolean validateWithSingleSchema(File xml, File xsd) {
		boolean legal = false;

		try {
			SchemaFactory sf = SchemaFactory
					.newInstance("http://www.w3.org/2001/XMLSchema");
			Schema schema = sf.newSchema(xsd);

			Validator validator = schema.newValidator();
			validator.validate(new StreamSource(xml));

			legal = true;
		} catch (Exception e) {
			legal = false;
			log.error(e.getMessage());
		}

		return legal;
	}

	public static boolean validateWithMultiSchemas(InputStream xml,
			List<File> schemas) {
		boolean legal = false;

		try {
			Schema schema = createSchema(schemas);

			Validator validator = schema.newValidator();
			
			validator.validate(new StreamSource(xml));
			
			legal = true;
		} catch (Exception e) {
			legal = false;
			log.error(e.getMessage());
		}

		return legal;
	}

	/**
	 * Create Schema object from the schemas file.
	 * 
	 * @param schemas
	 * @return
	 * @throws ParserConfigurationException
	 * @throws SAXException
	 * @throws IOException
	 */
	public static Schema createSchema(List<File> schemas)
			throws ParserConfigurationException, SAXException, IOException {
		SchemaFactory sf = SchemaFactory
				.newInstance("http://www.w3.org/2001/XMLSchema");
		SchemaResourceResolver resourceResolver = new SchemaResourceResolver();
		sf.setResourceResolver(resourceResolver);

		Source[] sources = new Source[schemas.size()];

		DocumentBuilderFactory docFactory = DocumentBuilderFactory
				.newInstance();
		docFactory.setValidating(false);
		docFactory.setNamespaceAware(true);
		DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

		for (int i = 0; i < schemas.size(); i++) {
			org.w3c.dom.Document doc = docBuilder.parse(schemas.get(i));
			DOMSource stream = new DOMSource(doc, schemas.get(i)
					.getAbsolutePath());
			sources[i] = stream;
		}

		return sf.newSchema(sources);
	}

}


XSLTParser.java

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Templates;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

public class XSLTParser {

	public static void xslt(String inFilename, String outFilename,
			String xsltFilename) {
		try {
			// Create transformer factory
			TransformerFactory factory = TransformerFactory.newInstance();

			// Use the factory to create a template containing the xsl file
			Templates template = factory.newTemplates(new StreamSource(
					new FileInputStream(xsltFilename)));

			// Use the template to create a transformer
			Transformer xformer = template.newTransformer();

			// Prepare the input and output files
			Source source = new StreamSource(new FileInputStream(inFilename));
			Result result = new StreamResult(new FileOutputStream(outFilename));

			// Apply the xsl file to the source file and write the result to the
			// output file
			xformer.transform(source, result);
		} catch (FileNotFoundException e) {
			// File not found
		} catch (TransformerConfigurationException e) {
			// An error occurred in the XSL file
		} catch (TransformerException e) {
			// An error occurred while applying the XSL file
			// Get location of error in input file
		}
	}
}



测试方法:

public boolean testValidate() throws SAXException,
			FileNotFoundException {
		InputStream xml = new FileInputStream(new File("data.xml"));

		List<File> schemas = new ArrayList<File>();
		schemas.add(new File("DeclarationTypeCode.xsd"));
		schemas.add(new File("HeadDefine.xsd"));

		schemas.add(new File("DateTimeDefine.xsd"));
//		schemas.add(new File("DeclarationDefine.xsd"));
		schemas.add(new File("base.xsd"));
		return XMLParser.validateWithMultiSchemas(xml, schemas);
	}


说明:验证的XSD为base.xsd,

在base.xsd中import了HeadDefine.xsd和DeclarationDefine.xsd,

在HeadDefine.xsd中又import了DeclarationTypeCode.xsd

在DeclarationDefine.xsd中又import了DateTimeDefine.xsd


测试结果,此测试方法返回true则验证成功,返回false则验证失败。

XSD校验工具 传入xsd文件和xml文件,校验xml中的错误并给出提示信息 立即下载

相关推荐

验证XSD和XML文件的小工具

验证xml文件与xsd是否匹配

在线检测xml是否符合xsd的网站 亚马逊 amazon sp-api feed 开发 经常需要用到xsd,xml,如何检测这个xml是否写对,成了一个问题,介绍一个在线检测xml是否符合xsd的网站

在线检测xml是否符合xsd的网站 亚马逊 amazon sp-api feed 开发 经常需要用到xsd,xml,如何检测这个xml是否写对,成了一个问题,介绍一个在线检测xml是否符合xsd的网站

AI 前沿技术实战博客:LLM / Agent / AI 制药 / 生信四大栏目日更,硬核干货 + 可复现代码,看完就能上手 1495

通过xsd验证xml

在vs2005里,用vc实现xsd对xml的检测

xsd校验xml工具

xml校验工具,用于校验xml报文是否符合xsd规范

忙碌的菠萝 2万+

域自适应的理解与想法(Domain Adaptation)

这幅图是域适应非常有名的一篇论文中的插图,被很多文章转载。 什么是领域自适应? Domain Adaptation是迁移学习中很重要的一部分内容,目的是把分布不同的源域和目标域的数据,映射到一个特征空间中,使其在该空间中的距离尽可能近。于是在特征空间中对source domain训练的目标函数,就可以迁移到target domain上,提高target domain上的准确率。 上面的图主要的思想来源于GAN,上图由三部分组成:特征映射网络 标签分类网络和和域判别网络 其中,source domain的数.

yuanxue18的博客 5982

创建动态代理对象bean,并动态注入到spring容器中

使用过Mybatis的同学,应该都知道,我们只需要编写mybatis对应的接口和mapper XML文件即可,并不需要手动编写mapper接口的实现。这里mybatis就用到了JDK动态代理,并且将生成的接口代理对象动态注入到Spring容器中。 这里涉及到几个问题。也许有同学会有疑问,我们直接编写好类,加入@Component等注解不是可以注入了吗?或者在配置类(@Configuration)...

lichuangcsdn的博客 3万+

使用xsd验证xml格式的正确性

3.该方式验证xml格式正确性,轻代码重xsd配置,但也有好处,当xml格式发生改变时,无需修改代码,只需要对应修改xsd即可,且相对代码来说,易上手。

qq_37016994的博客 4575

如何评估一颗 AI 芯片的真实性能?TOPS、FPS 与 Token/sec 全解析

AI 芯片在实际部署中,其理论峰值性能往往无法反映真实执行效率。如何科学评估一颗 AI 芯片的“真实性能”,已成为芯片选型与系统集成环节中的关键技术问题。本文从工程实战角度出发,深入拆解当前常用性能评估指标(TOPS、FPS、Token/sec)背后的定义逻辑与使用陷阱,并结合推理模型部署与执行路径,系统讲解 AI 芯片在不同场景下的性能验证方法。通过对芯片算力-功耗-调度三维关系的分析,读者将掌握评估一颗 AI 芯片是否“跑得动业务”的核心判断能力。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 3389

使用xsd文件验证xml

项目中遇到了需要对xml数据进行入库的需求,但是在入库之前需要利用xsd文件对xml的合法性进行验证。 在网上找代码,找到了 leizhimin 的BLOG ,将其整理。感谢博主分享代码。 代码: import java.io.File; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFa

levelmini的专栏 1万+

嵌入式系统实战:DroneCAN协议栈移植与避坑指南

本文详细介绍了在嵌入式系统中移植DroneCAN协议栈的完整流程与实战技巧。内容涵盖移植前的准备工作、内存管理优化、CRC校验实现、多帧数据处理及硬件平台适配等关键环节,并以STM32F4为例提供了具体的移植步骤和避坑指南,帮助开发者高效完成DroneCAN在嵌入式设备上的集成与应用。

solidity8miner的博客 547

一文速学数模-K-means聚类算法实战:信用卡用户画像聚类分析

该项目算是非常经典的金融业务用户画像的基础分析了,主要根据用户信用卡使用行为数据进行分析,根据收集到的不同字段信息,对每个用户划分类别。这里需要说明一下的是,聚类模型只是将具有相似行为的大部分用户聚集到一个类别里面,这点并不会考虑到每个字段的含义,也就是分成的类别并不是用户价值等级,此类别仅仅是这个类别大体相同的信用卡用户行为对象,并不能给每个用户价值打上标签,那是评价模型做的事,这里要注意不要搞混淆了,用户价值评价是评价模型决定的,而画像是聚类模型分析的。

master_hunter的博客 1万+

SAXReader和XSD校验使用

文章目录前言一、SAXReader 读取xml文件内容 前言 最近有个需求是根据文档,来进行不同申请类型不同项目类型来进行相关xml文档的校验(校验规则就是文档里的属性类型,长度等),因此了解到了SAXReader和XSD两种解析xml的方法,一开始公司打算使用SAXReader取出相关值,直接进行判断。后来发现这个方法拓展性不是很好,就改为了xsd。 一、SAXReader 读取xml文件内容 直接上代码 ...

Genmer的博客 1350

我写了一个自动识别火车车厢位置的算法【lidar点云识别】

我写了一个自动识别火车车厢位置的算法【lidar点云识别】

qq_43212290的博客 797

C#使用XSD来验证XML。

我使用XmlReader来处理,因为觉得XmlReader简单点。 我自己做了个例子来说明,例子里的XML不是很复杂,没有子节点的。 XML 文件(a.xml):  0001  我的内容    6  trueXSD文件(a.xsd):http://www.w3.org/2001/

dogfish的专栏 8636

Open3D 机载点云电力线提取【2025最新版】

传统方法实现的机载点云电力线分割提取。博客长期更新,本文最新更新时间为:2025年3月23日。

点云侠的博客 4468

Unity零基础到入门 ☀️| 近万字教程 对 Unity 中的 动画系统基础 全面解析+实战演练,你确定要错过吗?

Unity动画系统,Animation,Animator。 本文对Unity中的动画系统基础做了一个全面解析,还包括实战演练。近万字教程让你对Unity的动画系统有一个系统的了解,敬请品尝!

努力前行,总会成为自己心中的那道光 9万+

java xsd校验,java中使用xsd验证xml | 学步园

1. 首先要导入包,axiom包请到apache上下载2. xsd和xml 文件放在工程 bin路径下即可。package xmlValidate;import java.io.ByteArrayInputStream;import java.io.FileNotFoundException;import java.io.IOException;import javax.xml.XMLConsta...

weixin_33034651的博客 825

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

php怎样用我的xsd文件验证我的xml文件,具体介绍使用xsd验证xml的代码分享

Xsd结构定义( XML Schemas Definition )XML Schema是DTD的替代品。XML Schema语言也就是XSD。XML Schema描述了XML文档的结构。可以用一个指定的XML Schema来验证某个XML文档,以检查该XML文档是否符合其要求。文档设计者可以通过XML Schema指定一个XML文档所允许的 结构和内容,并可据此检查一个XML文档是否是有效的。XM...

weixin_42436482的博客 432

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

使用XSD模式验证XML数据

1.使用XSD模式验证XML数据 验证XML文档的步骤 (1)定义一个ValidationEventHandle事件处理方法。 (2)创建XmlReaderSettings对象的实例。 (3)将ValidationEventHandle与XmlReaderSettings相关联 (4) 将XmlReaderSettings的ValidationType属性设置为Va...

weixin_30919429的博客 526

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式

XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD),作用是定义 XML 文档的合法构建模块,类似 DTD,但更加强大。作用有: ①定义可出现在文档中的元素 ②定义可出现在文档中的属性 ③定义哪个元素是子元素 ④定义子元素的次序 ⑤定义子元素的数目 ⑥定义元素是否为空,或者是否可包含文本 ⑦定义元素和属性的数据类型 ⑧定义元素和属性的默认值以及固定值

gdjlc的专栏 1万+

使用XSD验证xml

使用XSD验证XML本文简单介绍如何使用XSD验证自己的xml。项目中我们经常使用xml作为配置或者数据交互的文件格式,在解析XML前最好验证一下或者在生成xml文件后验证一下生成的文件格式是正确,这样可以避免解析时出现一些低级的xml文件不符合预定义格式的错误。优快云无法正确显示这些xsd, xml以及java代码,如果需要请参考http://yqbjtu.blog.163.com/blog/s

russle的专栏 7377

VB Script 如何使用XSD验证XML文档格式

Binhua Liu   XSD (XML Schema Definition) 文件用于定义XML文件的格式,通过XSD文件来验证XML文档格式是否符合定义中的规范,可以发现并指出XML文档中的错误。 我发现网络上介绍VB Script读取XML文档的文章很多,但是很难找到使用XSD文件验证XML Schema的文章。我这里介绍一个我写的例子。   有XML文件,定义了author.xm...

weixin_34127717的博客 99

java xml xsd 验证_java使用xsd校验xml样例

知识点:XSD文件是指XML结构定义 ( XML Schemas Definition )文件,是DTD的替代品。可以用一个指定的XML Schema来验证某个XML文档,以检查该XML文档是否符合其要求XML Schema的优点:1) XML Schema基于XML,没有专门的语法2) XML可以象其他XML文件一样解析和处理3) XML Schema支持一系列的数据类型(int、float、B...

weixin_34579167的博客 374

php怎样用我的xsd文件验证我的xml文件,使用XSD进行PHP SimpleXMLElement验证

是否可以使用存储在字符串中的XSD shema验证SimpleXMLElement?我得到这个xml槽CURL:DA1100208DONE在我这边我得到这样的:if ( $_SERVER['REQUEST_METHOD'] === 'POST' ){$post_text = file_get_contents('php://input');$xml = new SimpleXMLElement($...

weixin_28952471的博客 209

java中使用xsd验证xml

1. 首先要导入包,axiom包请到apache上下载 2. xsd和xml 文件放在工程 bin路径下即可。  package xmlValidate;import java.io.ByteArrayInputStream;import java.io.FileNotFoundException;import java.io.IOException;i

波波的专栏 6407

使用架构(XSD)验证XML文件

假使说XML是一个数据库,那么XSD就是这个数据库的结构。由此可见,XSD是如此重要,如果没有它,我们如何声明以及验证我们需要的XML数据文件的格式和合法性呢?那是不可能完成的任务,如果你将XML数据文件当作普通的文本文件去验证的话。 我用下面一个例子来解释如何定义XSD以及如何使用它来验证 1. 首先来看一下我们的数据文件xml version="1.0" encoding="utf-8" ?>

陈希章@中国 899
上一篇: 使用xsd文件验证xml
下一篇: 使用JS操作SVG示例--时钟
levelnini
博客等级 码龄14年 45粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值