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