`
YOUNG918
  • 浏览: 188737 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java中实现xml schema 验证文件

    博客分类:
  • java
阅读更多

XML 是可扩展标记语言,也就是说其中的标记我们可以按照我们的意愿生成,只要符合语法规则就认为是合法的。

但是很多情况下我们需要根据一定的验证规则对xml 文档实施限制。当我们书写一个xml 文档的时候,通过验证文档对其进行验证,可以保证所书写的文档是合法合理的。这样我们的程序才可以对其进行适当的操作。不然随意写一个符合语法的xml 文档,我们的程序显然不能总是能对其进行操作。

验证文档对所书写的xml 文档进行合理合法的验证,验证文档有两种格式,一种为dtd ,一种为xsdschema 形式)。

Xsd 文档主要起一个验证作用!

我们可以在操作一个传输过来的,或者新生成的xml 文档先进行验证,然后再进行解析,这样可以保证操作成功。

在此,我们使用schema 格式的文档对xml 进行验证。

<? xml version = "1.0" encoding = "UTF-8" ?>

<!--W3C Schema generated by XMLSpy v2008 (http://www.altova.com)-->

< xs:schema xmlns = "http://www.frank.com"

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

  < xs:element name = "students" >

  < xs:complexType >

   < xs:sequence >

    < xs:element ref = "student" maxOccurs = "unbounded" />

   </ xs:sequence >

  </ xs:complexType >

  </ xs:element >

  < xs:element name = "student" >

  < xs:complexType >

   < xs:sequence >

    < xs:element ref = "name" />

    < xs:element ref = "age" />

   </ xs:sequence >

  </ xs:complexType >

  </ xs:element >

  < xs:element name = "name" type = "xs:string" />

  < xs:element name = "age" type = "xs:byte" />

</ xs:schema >

 

 

<? xml version = "1.0" encoding = "UTF-8" ?>

< my:students xmlns:my = "http://www.frank.com" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" >

  < my:student >

  < my:name > tom </ my:name >

  < my:age > 23 </ my:age >

  </ my:student >

  < my:student >

  < my:name > mike </ my:name >

  < my:age > 23 </ my:age >

  </ my:student >

</ my:students >

 

package test;

 

import java.io.File;

import java.io.IOException;

import java.net.URL;

 

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;

 

public class TestXML {

 

    /**

      * @param args

      */

    public static void main(String[] args) throws SAXException, IOException {

       // 建立 schema 工厂

       SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");

       // 建立验证文档文件对象,利用此文件对象所封装的文件进行 schema 验证

       File schemaFile = new File("C:/Documents and Settings/pengch/workspace/xmlschema/test/students.xsd");

       // 利用 schema 工厂,接收验证文档文件对象生成 Schema 对象

       Schema schema = schemaFactory.newSchema(schemaFile);

       // 通过 Schema 产生针对于此 Schema 的验证器,利用 students.xsd 进行验证

       Validator validator = schema.newValidator();

       // 得到验证的数据源,就是 students.xml

       Source source = new StreamSource("C:/Documents and Settings/pengch/workspace/xmlschema/test/students.xml");

       // 开始验证,成功输出 success!!! ,失败输出 fail

       try {

           validator.validate(source);

           System.out.println("success!!!");

       } catch (Exception ex) {

           System.out.println("fail");

       }

 

    }

    }

 

抽象一下:

 

 

 

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.xml.sax.ErrorHandler;

import org.xml.sax.SAXException;

import org.xml.sax.SAXParseException;

 

public class DefaultErrorHandler implements ErrorHandler {

 

    protected static Log logger = LogFactory.getLog(DefaultErrorHandler.class);

   

    public void error(SAXParseException exception) throws SAXException {

    if(logger.isErrorEnabled()) {

        logger.error("XML file is invalid", exception);

    }

   

    throw new SAXException(exception);

    }

 

    public void fatalError(SAXParseException exception) throws SAXException {

    if(logger.isErrorEnabled()) {

        logger.error("XML file is invalid", exception);

    }

   

    throw new SAXException(exception);

    }

 

    public void warning(SAXParseException exception) throws SAXException {

    if(logger.isWarnEnabled()) {

        logger.warn("Warning", exception);

    }

    exception.printStackTrace();

    }

}

 

 

import java.io.IOException;

import java.io.InputStream;

 

import javax.xml.XMLConstants;

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.ErrorHandler;

import org.xml.sax.SAXException;

 

 

public class DefaultSchemaValidator extends SchemaValidator {

 

    private InputStream schemaStream;

   

    /**

     * 构造函数

     * @param schemaStream schema 文件输入流

     */

    public DefaultSchemaValidator(InputStream schemaStream) {

    this.schemaStream = schemaStream;

    }

   

    /**

     * 构造函数

     * @param clz

     * @param schemaFile schema 文件

     */

    public DefaultSchemaValidator(Class clz, String schemaFile) {

    this.schemaStream = clz.getResourceAsStream(schemaFile);

    }

   

    public DefaultSchemaValidator(ClassLoader classLoader, String schemaFile) {

    this.schemaStream = classLoader.getResourceAsStream(schemaFile);

    }

   

    public void validate(InputStream xmlStream, ErrorHandler errorHandler) throws SAXException, IOException {

    Schema schema = createSchema(schemaStream);

    Validator validator = schema.newValidator();

    validator.setErrorHandler(errorHandler);

    validator.validate(new StreamSource(xmlStream));

    }

   

    /**

         * 验证给定的 xml 是否合法

         *

         * @return

         * @throws SAXException

         */

    protected Schema createSchema(InputStream schemaStream) throws SAXException {

    SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);

    return schemaFactory.newSchema(new StreamSource(schemaStream));

    }

}

 

import java.io.IOException;

import java.io.InputStream;

 

import org.xml.sax.ErrorHandler;

import org.xml.sax.SAXException;

 

 

public abstract class SchemaValidator {

    public abstract void validate(InputStream xmlStream, ErrorHandler errorHandler) throws SAXException, IOException;

    public void validate(InputStream xmlStream) throws SAXException, IOException {

    validate(xmlStream, new DefaultErrorHandler());

    }

}

 

 

 

import java.io.IOException;

 

import org.xml.sax.SAXException;

 

import com.DefaultSchemaValidator;

import com.SchemaValidator;

 

public class TestXML2 {

 

    /**

      * @param args

      */

    public static void main(String[] args) {

       // TODO Auto-generated method stub

       SchemaValidator schemaValidator=   new DefaultSchemaValidator(TestXML2.class,"Students.xsd");

       try {

           schemaValidator.validate(TestXML2.class.getResourceAsStream("students.xml"));

       } catch (SAXException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       } catch (IOException e) {

fon

分享到:
评论

相关推荐

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

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

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

    总的来说,Java中的XML Schema验证是一个关键的过程,它确保了XML数据的准确性和一致性,从而降低了程序处理数据时出错的风险。通过正确地构建和使用XSD,开发者可以构建更加健壮、可靠的XML处理系统。

    Java通过XML Schema校验XML

    然而,Java中处理XML及其实现XSD校验的过程并不直观,尤其是当涉及到Sun提供的XML相关软件包时。这是因为W3C为XML定义了大量的规范,这使得学习和理解相关的API变得异常困难。此外,随着新规范的不断推出,掌握所有...

    根据xml schema生成xml

    &lt;xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"&gt; &lt;/xs:schema&gt; ``` 这个例子定义了一个`person`元素,包含`firstName`和`lastName`两个子元素,都是字符串类型。 2. **验证XML文档**:...

    XML文件XML Schema.docXML Schema.doc

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

    XML Schema教程

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

    xmlschema-core-2.0.3的jar

    `xmlschema-core-2.0.3.jar` 提供了处理这些XSD文件的API,使得Spring能够验证发送到服务的请求和从服务返回的响应是否符合预定义的XSD规范。 这个库提供了以下主要功能: 1. **解析和编译XSD文档**:它可以解析...

    XmlSchema-1.4.7.jar

    XmlSchema库则为Java开发者提供了处理这些XML Schema文档的API,使得在Java应用程序中解析、验证和生成符合XML Schema的XML文档变得容易。 在开发过程中,使用XmlSchema-1.4.7.jar可以帮助开发者实现以下功能: 1. ...

    XmlSchema-1.4.6.jar

    `XmlSchema-1.4.6.jar` 是一个包含Java绑定的XML Schema API的库,它为处理XML Schema文档提供了支持。在开发Web服务客户端时,尤其是与基于SOAP(简单对象访问协议)的Web服务交互时,这个库扮演了至关重要的角色。...

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

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

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

    在Java中,XML文件的合法性验证是通过DOM(Document Object Model)解析器来实现的。DOM解析器将XML文档加载到内存中,并构建一个树形结构,使得开发者可以通过API访问和操作XML文档的各个部分。当涉及到XML文件的...

    XMLSchema.chm

    这可以通过编程语言中的XML解析库或XML工具实现,例如Java的JAXB,.NET框架的XmlSchema类等。 10. **学习资源**:"XMLSchema.chm"这样的帮助文档通常会详细解释XML Schema的语法、用法和示例,对于初学者来说是非常...

    apache xmlschema api文档

    这些文档能够帮助开发者了解如何在Java程序中导入和使用XML Schema API,从而实现XML文档的解析和验证。 以下是XML Schema API中的几个关键组件和概念: 1. **XMLSchemaFactory**:这是创建XML Schema对象的工厂类...

    xmlschema-1.4.5.jar.zip

    "xmlschema-1.4.5.jar.zip"是一个包含XML Schema相关实现的Java类库,主要用于处理和验证XML文档是否符合特定的XSD规范。 在Java环境中,`xmlschema-1.4.5.jar`是一个关键组件,它提供了一系列API供开发者使用,...

    XSD根据xml生成schema文件

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

    xml dom,sax解析,schema验证

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

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

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

    XML Schema

    4. 包含和导入:一个XML Schema可以包含或导入另一个XML Schema,实现模式的模块化。 XML Schema 提供了强大的验证功能,确保XML文档符合业务需求和数据规范。在处理XML数据时,使用XML Schema可以显著提高数据处理...

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

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

    xml Schema学习

    5. **源码解析**:可能包含XML Schema在实际项目中的应用,比如在Java或.NET中的使用,以及如何将XML Schema与代码库集成。 压缩包中的“XML Schema学习总结.pdf”很可能是一个详细的教程,包含了XML Schema的各个...

Global site tag (gtag.js) - Google Analytics