XML文件
<?xml version="1.0"?>
<note
xmlns="http://www.w3school.com.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3school.com.cn file:///D:/_dev_stu/xsdtest/src/note.xml">
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting this weekend!</body>
</note>
XSD文件
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
測試代碼
import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.SAXValidator;
import org.dom4j.io.XMLWriter;
import org.dom4j.util.XMLErrorHandler;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.File;
/**
* Java XML校驗測試
*
* @author leizhimin,2008-9-4 14:42:35
*/
public class ValidataXMLTest {
public static void main(String[] args) {
validateXMLByXSD();
validateXMLByDTD();
}
/**
* 通過XSD(XML Schema)校驗XML
*/
public static void validateXMLByXSD() {
String xmlFileName = "Q:\\_dev_stu\\xsdtest\\src\\note.xml";
String xsdFileName = "Q:\\_dev_stu\\xsdtest\\src\\note.xsd";
try {
//創(chuàng)建默認的XML錯誤處理器
XMLErrorHandler errorHandler = new XMLErrorHandler();
//獲取基于 SAX 的解析器的實例
SAXParserFactory factory = SAXParserFactory.newInstance();
//解析器在解析時驗證 XML 內(nèi)容。
factory.setValidating(true);
//指定由此代碼生成的解析器將提供對 XML 名稱空間的支持。
factory.setNamespaceAware(true);
//使用當(dāng)前配置的工廠參數(shù)創(chuàng)建 SAXParser 的一個新實例。
SAXParser parser = factory.newSAXParser();
//創(chuàng)建一個讀取工具
SAXReader xmlReader = new SAXReader();
//獲取要校驗xml文檔實例
Document xmlDocument = (Document) xmlReader.read(new File(xmlFileName));
//設(shè)置 XMLReader 的基礎(chǔ)實現(xiàn)中的特定屬性。核心功能和屬性列表可以在 [url]http://sax.sourceforge.net/?selected=get-set[/url] 中找到。
parser.setProperty(
"http://java.sun.com/xml/jaxp/properties/schemaLanguage",
"http://www.w3.org/2001/XMLSchema");
parser.setProperty(
"http://java.sun.com/xml/jaxp/properties/schemaSource",
"file:" + xsdFileName);
//創(chuàng)建一個SAXValidator校驗工具,并設(shè)置校驗工具的屬性
SAXValidator validator = new SAXValidator(parser.getXMLReader());
//設(shè)置校驗工具的錯誤處理器,當(dāng)發(fā)生錯誤時,可以從處理器對象中得到錯誤信息。
validator.setErrorHandler(errorHandler);
//校驗
validator.validate(xmlDocument);
XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint());
//如果錯誤信息不為空,說明校驗失敗,打印錯誤信息
if (errorHandler.getErrors().hasContent()) {
System.out.println("XML文件通過XSD文件校驗失?。?);
writer.write(errorHandler.getErrors());
} else {
System.out.println("Good! XML文件通過XSD文件校驗成功!");
}
} catch (Exception ex) {
System.out.println("XML文件: " + xmlFileName + " 通過XSD文件:" + xsdFileName + "檢驗失敗。\n原因: " + ex.getMessage());
ex.printStackTrace();
}
}
/**
* 通過DTD校驗XML
*/
public static void validateXMLByDTD() {
//todo:暫時不用,以后再說吧
}
}
運行結(jié)果
方法二:
最近對Schema 驗證研究了一下, 代碼如下:
所需JAR包需要自己下載(版本一定要正確)
public class SchemaValidation {
public static void main(String[] args) {
validate();
}
public static void validate() {
try {
SchemaValidation demo = new SchemaValidation();
// Give the xml(標(biāo)準(zhǔn)化越來越近了) and schema name
InputStream xml(標(biāo)準(zhǔn)化越來越近了)String = demo.getClass().getResourceAsStream("GBAInit.xml(標(biāo)準(zhǔn)化越來越近了)");
InputStream schemaStr = demo.getClass().getResourceAsStream("GBAInitSchema.xsd");
SAXReader reader = createSAXReader(schemaStr);
System.out.println("XSD parse successfully !");
Document document = reader.read(xml(標(biāo)準(zhǔn)化越來越近了)String);
System.out.println("Successfully validation .. . ");
} catch (DocumentException e) {
System.out.println("Exception occurred: " + e);
Throwable nestedException = e.getNestedException();
if (nestedException != null) {
System.out.println("NestedException: " + nestedException);
nestedException.printStackTrace();
} else {
e.printStackTrace();
}
} catch (Throwable t) {
System.out.println("Exception occurred: " + t);
t.printStackTrace();
}
}
/** Registers the Verifier with the SAXReader */
protected SAXReader createSAXReader(InputStream schemaURI) throws Exception {
System.out.println("Loaded schema document: " + schemaURI);
// use autodetection of schemas
VerifierFactory factory = new com.sun.msv.verifier.jarv.TheFactoryImpl();
Schema schema = factory.compileSchema(schemaURI);
Verifier verifier = schema.newVerifier();
verifier.setErrorHandler(new ErrorHandler() {
public void error(SAXParseException e) {
System.out.println("ERROR: " + e);
}
public void fatalError(SAXParseException e) {
System.out.println("FATAL: " + e);
}
public void warning(SAXParseException e) {
System.out.println("WARNING: " + e);
}
});
// now install the verifying filter
VerifierFilter filter = verifier.getVerifierFilter();
SAXReader reader = new SAXReader();
reader.setxml(標(biāo)準(zhǔn)化越來越近了)Filter(filter);
return reader;
}
本文來源于 WEB開發(fā)網(wǎng) 原文鏈接:http://www.cncms.com.cn/ajax/9977.htm
---------------------------------------------------------
專注移動開發(fā)
Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
posted on 2010-03-11 11:11
TiGERTiAN 閱讀(2103)
評論(0) 編輯 收藏 所屬分類:
Java