本文簡單介紹使用java語言爽柒,通過XSD文件來校驗XML文件結構吴菠。
XML和XSD介紹
XML文件:XML的全稱是可擴展標記語言,是一種用于標記電子文件使其具有結構性的標記語言浩村,可以按照約定的格式定義出自己需要的結構橄务,這種格式現(xiàn)在大量用于項目的的外部配置文件和信息傳輸領域。
比如我自己的項目MySQL數(shù)據(jù)遷移和項目魔法計算器都用到了XML文件穴亏,這樣可以解耦出配置屬性蜂挪,使項目更加靈活,不用動不動就去改動代碼嗓化。
XSD文件:XSD的全稱是 可擴展標記語言架構棠涮,相對XML而言多了架構兩個字,因為它的作用就是用以描述一個XML文件的結構刺覆。
就是說XSD文件內部通過XML的語法編寫严肪,來描述另一份XML文件應有的元素,節(jié)點等結構組成谦屑,可以起到規(guī)范以及校驗的作用驳糯。
同樣作用的還有DTD文件,不過XSD文件更優(yōu)越一些氢橙。
通過Java代碼校驗XML
public class CheckXML {
public static void checkXML() {
String path = System.getProperty("user.dir");
System.out.println("地址為:" + path);
//xsd文件路徑酝枢,自己填寫路徑
String xsdPath = path + "\\xsd\\balabala.xsd";
//xml文件路徑,自己填寫路徑
String xmlPath = path + "\\xml\\balabala.xml";
System.out.println("xsdPath為:" + xsdPath);
System.out.println("xmlPath為:" + xmlPath);
try {
//錯誤消息處理類
XMLErrorHandler errorHandler = new XMLErrorHandler();
//獲得解析器工廠類
SAXParserFactory factory = SAXParserFactory.newInstance();
//在解析XML是進行驗證
factory.setValidating(true);
//支持命名空間
factory.setNamespaceAware(true);
//獲得解析器
SAXParser parser = factory.newSAXParser();
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:" + xsdPath);
SAXReader reader = new SAXReader();
//讀取XML文件
Document document = reader.read(new File(xmlPath));
SAXValidator validator = new SAXValidator(parser.getXMLReader());
// 發(fā)生錯誤時得到相關信息
validator.setErrorHandler(errorHandler);
// 進行校驗
validator.validate(document);
XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint());
//通過是否有錯誤信息判斷校驗是否匹配
if (errorHandler.getErrors().hasContent()) {
System.out.println("XML文件通過XSD文件校驗失敽肥帧帘睦!");
writer.write(errorHandler.getErrors());
} else {
System.out.println("XML文件通過XSD文件校驗成功!");
}
} catch (ParserConfigurationException | SAXException | DocumentException |
IOException e) {
e.printStackTrace();
}
}
如果出現(xiàn)
"不允許有匹配 "[xX][mM][lL]"
的處理指令目標"錯誤坦康,是因為<?xml version="1.0" encoding="GB2312"?>
信息頭格式不規(guī)范竣付,比如前面有空格。
<br /><br />