`
cobo85
  • 浏览: 117008 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Dom4J通过schema校验XML

阅读更多

      前段时间因项目需要和外部进行数据交换,采用XML为数据交换载体。这样就需要在数据交换前调用schema进行数据合法性校验,先通过XMLSpy工具制定好XSD验证文件(XMLSpy确实很方便),然后通过dom4j进行校验。废话不多说,关键代码贴下

     校验器:

import java.io.IOException;

import org.dom4j.io.SAXReader;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;



public class Validateor {
	public static SAXReader reader;
	private static EntityResolver aresolve;//校验器
	private static Validateor validateor=Validateor.getInstance();
	static{
		if(aresolve==null){
		aresolve=new EntityResolver(){
			public InputSource resolveEntity(String arg0, String arg1)
			throws SAXException, IOException {
				Resource resource =new ClassPathResource("com/***/***/***/***/a.xsd");
				return new InputSource(resource.getInputStream());
			}
	
			};
		}
		if(reader==null){
			reader=new SAXReader(true);
		}
		try {
			//符合的标准
			reader.setFeature("http://apache.org/xml/features/validation/schema", true);   
	        reader.setFeature("http://apache.org/xml/features/validation/schema-full-checking",true);
	        reader.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage","http://www.w3.org/2001/XMLSchema"); 
		} catch (SAXException e1) {
			System.err.println("设置校验参数错误");;
		} 
		
	}
	private Validateor(){
		
	}
	public static SAXReader valid(String type){
		//根据不同的类型读取相应的校验文件,此处删除了一些业务代码
		if("01".equals(type))  reader.setEntityResolver(aresolve);
		return reader;
	}
	
	synchronized public static Validateor getInstance(){
		
		if(validateor==null){
			
			validateor=new Validateor();
		}
		return validByXsd;
		
	}

}

 

  校验方法

 

  

public Object validXmlData(String filePath, String type) {
		InputStreamReader streamReader=null;
		try {
			FileInputStream in = new FileInputStream(new File(filePath));
			//编码格式统一处理,支持非utf-8格式的声明文件
			streamReader= new InputStreamReader(in,"UTF-8");
			
		} catch (Exception e) {
			return "读取文件出现异常:"+e.getLocalizedMessage();
			
		}
		
		try {
			Document dateXml=Validateor.valid(type).read(streamReader);
			dateXml.setXMLEncoding("UTF-8");
			return dateXml;
		} catch (DocumentException e) {
			return "文件校验失败:"+e.getLocalizedMessage();
			
		}
		
	}

 

  Schema

 用XMLSpy生成,只把需要注意的命名空间贴上

 

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.xxx.com" targetNamespace="http://www.xxx.com" elementFormDefault="qualified">

 验证的XML

  

<account-data 
              xmlns="http://www.xxx.com" 
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
              xsi:schemaLocation="http://www.xxx.com a.xsd">

 

注意在XML的声明处: xsi:schemaLocation="http://www.xxx.com a.xsd"> 后面的a.xsd就是前面的schema名字,与前面的中间http://www.xxx.com 之间有空格。

 

 PS:加上命名空间的XML不能直接用dom4j的selectNodes之类的API得到节点,需要对XPATH进行设置,用dom4j的elements方法比较简单些,具体API可以翻阅dom4j的文档(如无特别要求还是不加命名空间的比较简便,校验方法都是一样的,但取值比较方便)。得到节点的属性值可以用:node.valueOf("@属性名")来取得。

 

分享到:
评论
1 楼 wayilau 2013-03-07  
这个可以一次性的校验出xml 中的所有问题吗?如果不行,有什么解决办法?

相关推荐

    XSD使用dom4j校验XML

    总之,DOM4J结合XSD提供了一种高效且灵活的方式来验证XML文件的结构和内容。这对于保证数据交换的准确性和一致性具有重要意义,特别是在需要处理大量XML数据的系统中。理解和掌握这一技术,能够帮助开发者提高代码的...

    DOM4J jar包 xml解析 所有的dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1包 导入直接使用

    5. **XML Schema支持**:DOM4J能够处理XML Schema,进行XML文档的验证,确保数据的正确性。 6. **StAX(Streaming API for XML)支持**:DOM4J也支持StAX解析器,这种解析方式结合了SAX的高效和DOM的易用性,可以在...

    Java通过XML Schema校验XML

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

    dom4j dom4j dom4j dom4j

    6. **XML Schema支持**:DOM4J能够处理XML Schema,进行XML文档的验证,确保数据的正确性。 7. **XML编解码**:DOM4J提供了XML编码和解码的功能,可以将Java对象序列化为XML,也可以将XML反序列化为Java对象。 8. ...

    dom4j.jar,dom,xml,dom4j

    此外,DOM4J还包含了XML Schema和DTD(Document Type Definition)的支持,可以用于验证XML文档是否符合定义的结构。这对于确保数据的准确性和一致性至关重要。 DOM4J-1.6.1.jar是DOM4J的一个版本,发布于2006年。...

    dom4j-1.6.1 与 dom4j-2.0.0-ALPHA

    5. 支持XML Schema和DTD:能够验证XML文档是否符合预定义的模式或规范。 接下来,DOM4J 2.0.0-ALPHA是后续的一个实验性版本,引入了一些新特性和改进。这个版本可能包含一些未成熟的功能,但预示着DOM4J未来的发展...

    dom4j需要的包

    2. **创建XML**:DOM4J通过Element、Attribute、Namespace等类提供了XML元素、属性和命名空间的创建和管理。你可以直接创建XML结构,或者通过读取现有XML文件并进行修改。 3. **XPath**:利用Jaxen库,DOM4J支持...

    dom4j 2.1.1

    3. 功能强大:DOM4J不仅支持基本的XML解析,还提供了高级特性,如XPath表达式支持、SAX和DOM的集成、XML Schema验证、XML编写和输出等。XPath是一种强大的查询语言,能够方便地定位XML文档中的节点。 4. 扩展性:...

    dom4j.jar,java xml

    3. **XPath支持**:DOM4J提供了对XPath的支持,可以方便地通过表达式选取XML文档中的特定部分。 4. **文档建模**:除了基本的节点操作,DOM4J还提供了元素、属性、文本、注释、处理指令等高级功能,使得构建和操作...

    XML解析技术DOM4J解析

    DOM4J不仅在功能上超越了基本的XML文档表示,还融合了一系列高级特性,如集成的XPath支持、XML Schema验证以及用于处理大型文档或流式文档的基于事件的处理机制。 #### 功能特性详解 **1. 集成的XPath支持** DOM4...

    dom4j解析xml文件必备jar包

    DOM4J可以与Xerces一起工作,以提供更全面的XML处理能力,特别是当需要进行XML Schema验证时。 使用这些库文件,开发者可以轻松构建XML处理程序。例如,你可以使用DOM4J来读取XML文件,通过Jaxen执行XPath查询来...

    java中dom4j读写XML

    DOM4J不仅提供了基本的XML操作,还支持命名空间、事件处理、DTD和XML Schema验证等功能,是Java开发中处理XML的强大工具。学习和掌握DOM4J,能够极大地提高开发效率,特别是在需要频繁处理XML数据的场景下。

    dom4j-1.6.1.jar

    6. **XML Schema支持**:dom4j可以处理XML Schema定义,帮助验证XML文档是否符合指定的Schema规则。 **性能优势** 相比Java标准库中的DOM和SAX解析器,dom4j在许多方面具有性能优势。例如,它的API设计更加面向...

    dom4j(2.1.1+ 2.0.2+ 1.6.1).zip

    - **XML Schema支持**:可以验证XML文档是否符合特定的XML Schema定义。 - **文档处理**:支持命名空间、DTD和XSLT转换,提供完整的XML文档处理功能。 **应用场景** - **Web服务开发**:在构建和解析SOAP消息时,...

    dom4j解析XML的两个JAR包(dom4j-1.6.1.jar 和 jaxen.jar)

    4. **XML Schema和DTD处理**:DOM4J可以验证XML文档是否符合指定的XML Schema或者DTD,确保数据的准确性和一致性。 5. **便捷的API**:DOM4J的API设计得直观易用,使得XML编程变得更加友好,降低了学习曲线。 ...

    dom4j.jar包,java解析xml dom4j.jar包

    - **XML Schema支持**:能够处理XML Schema文档,用于验证XML文档的结构和数据。 - **SAX和DOM兼容**:DOM4J可以与SAX和DOM API无缝集成,使开发者在不同解析器间切换更加方便。 - **便捷的文档操作**:提供了一整套...

    java Dom4j 无敌连环解析XML工具类

    DOM4J不仅限于这些基本操作,还支持XPath表达式、XML Schema验证、事件驱动的SAX解析、StAX解析以及转换为其他格式(如HTML或CSV)。通过熟练掌握DOM4J,你可以高效地处理各种XML任务,从而提高你的Java项目中的XML...

    Dom4j解析XML+使用简介

    3. **XML Schema验证**: Dom4j提供API来验证XML文档是否符合特定的XML Schema定义。 4. **DOM4J与JAXB集成**: 两者结合可以方便地进行XML到Java对象的映射,以及反之。 **五、Dom4j的优势** 1. **简洁API**: Dom4...

    dom4j-1.6;dom4j-1.6.1的jar包

    6. **XML Schema支持**:DOM4J可以验证XML文档是否符合指定的XML Schema规范。 7. **XPath和XSLT转换**:DOM4J集成了XPath和XSLT处理,可以直接进行XML到XML的转换。 在实际应用中,`dom4j-1.6.jar`和`dom4j-1.6.1....

    dom4j的源文件(dom4j-1.6.1)含例子和jar包

    **DOM4J 源文件详解** DOM4J 是一个非常强大的 Java XML API,它提供了丰富的功能,使得...这个压缩包中的源代码和示例是学习和使用 DOM4J 的宝贵资源,可以帮助开发者深入理解其内部机制,并在实际项目中灵活应用。

Global site tag (gtag.js) - Google Analytics