您的位置:首页 > 编程语言 > Java开发

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

2013-03-04 16:58 323 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: