`

Validate Xml

 
阅读更多
根据自己理解写的。
写完之后发现有注释更为详细的,地址为http://blog.csdn.net/fenglibing/article/details/4150642

利用XMLReader的parse方法来validate。
需要设定XMLReader的ContentHandler(内容处理器)
ContentHandler采用sun的msv方式


简化流程为:
得到XMLReader实例
SAXParserFactory parserFactory = SAXParserFactory.newInstance();
parserFactory.setNamespaceAware(true);
XMLReader reader = parserFactory.newSAXParser().getXMLReader();

得到校验者verifier
VerifierFactory factory = new com.sun.msv.verifier.jarv.TheFactoryImpl();
Verifier verifier = factory.newVerifier(fileSchema);

设定reader的内容处理器ContentHandler

reader.setContentHandler(verifier.getVerifierHandler());

解析xml
reader.parse(new InputSource(new StringReader(xmlSource)));



以下为源码。

package com.bull.iris.portal.common;

import java.io.File;
import java.io.InputStream;
import java.io.StringReader;

import javax.xml.parsers.SAXParserFactory;

import org.apache.log4j.Logger;
import org.iso_relax.verifier.Verifier;
import org.iso_relax.verifier.VerifierFactory;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXParseException;
import org.xml.sax.XMLReader;

import com.sun.msv.verifier.jarv.TheFactoryImpl;

public class ValidateXml {
private static Logger logger = org.apache.log4j.Logger.getLogger(ValidateXml.class);
public static boolean validate(String xmlSource, File fileSchema) {
logger.debug("enter ValidateXml class");

        //if schema file is null, then return;
        if (fileSchema == null) {
        logger.debug("file not found");
            return false;
        }
        logger.debug("enter ValidateXml class step 1");
        try {
            VerifierFactory factory = new TheFactoryImpl();
            Verifier verifier = factory.newVerifier(fileSchema);
            logger.debug("enter ValidateXml class step 2");

            SAXParserFactory parserFactory = SAXParserFactory.newInstance();
            parserFactory.setNamespaceAware(true);
            XMLReader reader = parserFactory.newSAXParser().getXMLReader();
            reader.setContentHandler(verifier.getVerifierHandler());
            logger.debug("enter ValidateXml class step 3");
//实现自己的错误处理。不写也可。有默认实现。
            verifier.setErrorHandler(new ErrorHandler() {
                public void error(SAXParseException e) {
                e.printStackTrace();
                logger.debug("error 1" + e.getMessage());
                    throw new RecieveValidationException(e.getLineNumber(), e
                            .getMessage());
                }

                public void fatalError(SAXParseException e) {
                e.printStackTrace();
                logger.debug("error 2" + e.getMessage());
                    throw new RecieveValidationException(e.getLineNumber(), e
                            .getMessage());
                }

                public void warning(SAXParseException e) {
                e.printStackTrace();
                logger.debug("error 3" + e.getMessage());
                }
            });

            logger.debug("enter ValidateXml class step 4");
            reader.parse(new InputSource(new StringReader(xmlSource)));
            logger.debug("enter ValidateXml class step 5");
        } catch (RecieveValidationException e) {
        e.printStackTrace();
        logger.debug("error 4" + e.getMessage());
            //throw e;
        return false;
        } catch (Exception e) {
        e.printStackTrace();
        logger.debug("error 5" + e.getMessage());
            //throw new RuntimeException(e);
        return false;
        }
        return true;
    }
分享到:
评论

相关推荐

    How to validate XML documents against Schematron rules

    ### 如何验证XML文档符合Schematron规则 #### Schematron模式概述 Schematron是一种简单而强大的结构化模式语言,用于对XML文档中的模式进行断言。它几乎完全依赖于XPath查询模式来定义规则和检查。Schematron验证...

    ValidateXml.exe

    验证xsd和xml文件的小工具,方便检索xml格式是否与xsd一致。

    JavaScript,验证XML正确性

    function validateXML(txt) { // 用于 IE 的代码 if (window.ActiveXObject) { var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async = "false"; xmlDoc.loadXML(document.all(txt).value); if...

    xml.zip_libxml 二次封装_xml 封装

    例如,可以创建一个`parseXMLFile`函数用于解析XML文件,`validateXML`函数用于校验XML的语法正确性。 2. **内存管理**:libxml2库内部使用了复杂的内存管理系统,二次封装时要确保正确管理内存分配和释放,避免...

    Notepad++ XML和JSON格式化插件(内附操作说明)

    5. 如需验证XML文档,可以使用“Plugins”->“XML Tools”->“Validate XML”。 通过这些插件,Notepad++不仅能够处理普通的文本编辑,还能在XML和JSON的处理上提供强大的支持,极大地提高了开发人员的工作效率。...

    node-xsd-schema-validator:NodeJS的架构(XSD)验证器

    XSD架构验证器 (XSD)模式验证器,使用执行实际验证。 先决条件 在后台,该实用程序使用Java进行实际验证。... validateXML ( xmlStr , 'resources/foo.xsd' , function ( err , result ) { if ( err ) {

    nodepad++ 手动安装XML格式化插件

    7. **验证安装**:启动NodePad++后,打开一个XML文件,点击菜单栏的"Plugins",你应该能看到"XML Tools"的选项,其中包括“Format Document”(格式化文档)、“Validate XML”(验证XML)等功能。这意味着XMLTools...

    notepad++ 对比插件 xml格式化插件

    例如,"Format XML"用于格式化XML,"Validate XML"进行验证,"XPath Evaluator"执行XPath查询,"XSLT Transform"进行XSLT转换。 5. **应用场景**: - **ComparePlugin**适用于版本控制中的代码审查,比较不同版本...

    mybatis xml添加提示

    在IntelliJ IDEA中,右键点击XML文件,选择"Validate XML"。在Eclipse中,可以通过"Project" -> "Clean"来刷新项目,使得IDE重新解析DTD。 4. **启用代码提示**:在IDE的设置中,确保XML的代码提示功能已启用。例如...

    Notepad++Xml格式化插件和json格式化插件

    - 此外,还可以使用"Validate XML"功能检查XML文档的语法正确性,或者使用"XPath Evaluation"来执行XPath查询。 JSON(JavaScript Object Notation)是另一种轻量级的数据交换格式,常用于前端与后端之间的数据...

    Notepad++的Json格式化插件和xml格式化插件(64位)

    对于XML文件,可能还有校验功能,如“Validate XML”。 6. 其他Notepad++增强: Notepad++除了提供这些格式化插件外,还有很多其他增强功能,例如代码折叠、语法高亮、多文档界面、查找和替换功能、宏录制和播放等...

    格式化xmlnodepad+++

    除了基本的XML格式化,Notepad++还提供了其他一些高级功能,比如验证XML文件的结构是否符合XML规范,通过XML Tools插件中的“Validate XML”选项实现。此外,还可以利用正则表达式进行搜索和替换,这对于清理大量XML...

    PyPI 官网下载 | validate-bes-xml-1.1.1.tar.gz

    `validate-bes-xml-1.1.1.tar.gz` 是在PyPI上发布的资源,它是一个名为`validate-bes-xml`的Python库的版本1.1.1的归档文件。该库主要用于验证Blackberry Enterprise Server(BES)的XML配置文件,确保其格式正确且...

    Netbeans6.5开发jsf

    JSF还提供了几种上下文参数,例如 `com.sun.faces.verifyObjects` 和 `com.sun.faces.validateXml`,它们会影响框架的行为。例如,`com.sun.faces.verifyObjects` 设置为 `false` 可能是为了提高性能,但可能会牺牲...

    PB11.5解析XML实例

    PB11.5支持XML Schema,可以使用`IXMLDOMDocument`的`validate`方法来验证XML文档是否符合预定义的Schema。 总结一下,PB11.5中的XML解析实例主要涵盖了以下几个方面: 1. DOM和SAX解析方式的介绍与选择。 2. 使用`...

    struts1.2 validate 源代码 实现

    3. **配置Struts-config.xml**:在项目的`struts-config.xml`文件中,需要配置你的ActionForm类和Action类,并指定`validate`方法将使用的表单字段。 ```xml <validate/> ``` 在这里,`<validate/>...

    XML验证器(XSD验证XML)

    3. 验证XML:使用XML文档对象的validate方法,传入XSD文档对象作为参数。 4. 处理验证结果:检查验证结果,如果返回值为真,说明XML文档有效;否则,遍历错误集合获取错误信息。 通过这样的验证器,开发者可以确保...

    JS操作XML中DTD介绍及使用方法分析

    function validateXML() { doc.load("example.xml"); if (!doc.validate()) { console.error("XML文档无效!"); } } ``` 总的来说,DTD是XML文档规范的核心组成部分,它为XML提供了一套严格的规则,确保数据的...

    xml帮助类,xml,C#

    `Validate`方法可以用来执行此验证。 在ASP.NET中,XML常用于存储配置信息、数据交换以及与Web服务交互。结合`HttpPostedFileBase`类,你可以接收用户上传的XML文件,然后利用`XmlDocument`进行处理和分析。 在...

Global site tag (gtag.js) - Google Analytics