通过xerces来验证xml是否匹配xsd的java示例

本文介绍了如何利用Xerces,一个开放源代码的XML语法分析器,在Java中验证XML文档是否符合指定的XSD schema。在JDK1.5及更高版本中,Xerces已成为XML解析的默认实现。文中提供了一个简单的示例来展示验证过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Xerces是一个开放源代码的XML语法分析器。从JDK1.5以后,Xerces就成了JDK的XML默认实现。

下面示例简单展示了如何用xerces来验证xml是否匹配xsd:

import java.io.File;
import java.io.IOException;

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 ValidateXML {

    public static void main(String[] args) throws SAXException, IOException{
        ValidateXML vXML = new ValidateXML();
        vXML.validatexml(".\\stock.xsd", ".\\stock.xml");
    }

    public void validatexml(String xsdpath, String xmlpath)
            throws SAXException, IOException {
        // 建立schema工厂
        SchemaFactory schemaFactory = SchemaFactory
                .newInstance("http://www.w3.org/2001/XMLSchema");
        // 建立验证文档文件对象,利用此文件对象所封装的文件进行schema验证
        File schemaFile = new File(xsdpath);
        // 利用schema工厂,接收验证文档文件对象生成Schema对象
        Schema schema = schemaFactory.newSchema(schemaFile);
        // 通过Schema产生针对于此Schema的验证器,利用schenaFile进行验证
        Validator validator = schema.newValidator();
        // 得到验证的数据源
        Source source = new StreamSource(xmlpath);
        // 开始验证,成功输出success!!!,失败输出fail
        try {

            validator.validate(source);
            System.out.println( "The xml is valid.");

        } catch (SAXException ex) {
            System.out.println(" The xml is not valid because ");
            ex.printStackTrace();
        }
    }
}

stock.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:f="http://example.test.com/stock"  targetNamespace="http://example.test.com/stock">
    <xs:element name="StockTrade"  type="f:StockTradeType"/>
        <xs:complexType name="StockTradeType">
            <xs:sequence>
                <xs:element name="ts" type="xs:dateTime"/>
                <xs:element name="symbol" type="xs:string"/>
                <xs:element name="price" type="xs:decimal"/>
            </xs:sequence>
        </xs:complexType>
</xs:schema>

stock.xml

<f:StockTrade xmlns:f="http://example.test.com/stock">
   <f:ts>2012-01-01T16:50:00Z</f:ts>
   <f:symbol>1</f:symbol>
   <f:price>555</f:price>
</f:StockTrade>

参考资料:

http://www.cnblogs.com/wufengtinghai/archive/2011/08/14/2137691.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值