知識點:
XSD文件是指XML結構定義 ( XML Schemas Definition )文件,是DTD的替代品。可以用一個指定的XML Schema來驗證某個XML文檔,以檢查該XML文檔是否符合其要求
XML Schema的優點:
1) XML Schema基於XML,沒有專門的語法
2) XML可以象其他XML文件一樣解析和處理
3) XML Schema支持一系列的數據類型(int、float、Boolean、date等)
4) XML Schema提供可擴充的數據模型。
5) XML Schema支持綜合命名空間
6) XML Schema支持屬性組。
可以使用Altova XMLSpy軟件打開查看消息體的定義情況,使用:DTD/模式---產生樣品XML文件夾,生成樣例消息體
例子:
校驗工具類方法:
ValidateXML.java
package com.xml.util;
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;
/**
* 校驗xml工具類
*/
public class ValidateXML {
private ValidateXML() {
}
public static boolean 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
validator.validate(source);
return true;
}
}
測試類:
TestMain.java
package com.xml.test;
import java.io.IOException;
import org.xml.sax.SAXException;
import com.xml.util.ValidateXML;
public class TestMain {
/**
* @param args
* @throws Exception
* @throws SAXException
*/
public static void main(String[] args) {
String xsdPath = "D:\\test\\TRequest.xsd";
String xmlPath = "D:\\test\\Request.xml";
try {
if (ValidateXML.validateXml(xsdPath, xmlPath)) {
System.out.println("校驗通過");
}
} catch (SAXException e) {
System.out.println("校驗失敗");
e.printStackTrace();
} catch (IOException e) {
System.out.println("校驗失敗");
e.printStackTrace();
}
}
}