System.out.println(args[0] + " is valid.");
}
catch (SAXException ex) {
System.out.println(args[0] + " is not valid because ");
System.out.println(ex.getMessage());
}
}
}
下面是用捆綁到 Java 2 Software Development Kit (JDK) 5.0 的 Xerces 版本檢查一個(gè)無(wú)效文檔時(shí)的典型輸出。
file:///Users/elharo/CS905/Course_Notes.xml is not valid because cvc-complex-type.2.3: Element 'legalnotice' cannot have character [children], because the type's content type is element-only.
改變驗(yàn)證所依據(jù)的模式、要驗(yàn)證的文檔甚至使用的模式語(yǔ)言都很簡(jiǎn)單。但無(wú)論什么情況,驗(yàn)證都需要經(jīng)過(guò)下列五個(gè)步驟:
為編寫(xiě)模式所用的語(yǔ)言加載一個(gè)模式工廠(chǎng)。
編譯源文件中的模式。
用編譯后的模式創(chuàng)建一個(gè)驗(yàn)證程序。
為需要驗(yàn)證的文檔創(chuàng)建 Source 對(duì)象。StreamSource 通常最簡(jiǎn)單。
驗(yàn)證輸入的源文檔。如果文檔無(wú)效,validate() 方法將拋出 SAXException。否則什么也不顯示。
可以反復(fù)使用同一個(gè)驗(yàn)證程序和同一個(gè)模式多次。但是所有類(lèi)都不是線(xiàn)程安全的或者可重入的。如果用多個(gè)線(xiàn)程同時(shí)驗(yàn)證,一定要保證每個(gè)線(xiàn)程有自己的 Validator 和 Schema 對(duì)象。
用文檔指定的模式驗(yàn)證
有些文檔指定了希望作為驗(yàn)證基礎(chǔ)的模式,一般使用 xsi:noNamespaceSchemaLocation 和/或 xsi:schemaLocation 屬性來(lái)指定,比如:
// 2. Load the specific schema you want. // Here I load it from a java.io.File, but we could also use a // java.net.URL or a javax.xml.transform.Source File schemaLocation = new File("/opt/xml/docbook/rng/docbook.rng"); // 3. Compile the schema. Schema schema = factory.newSchema(schemaLocation); // 4. Get a validator from the schema. Validator validator = schema.newValidator(); // 5. Parse the document you want to check. String input = "file:///Users/elharo/Projects/workspace/CS905/build/Java_Course_Notes.xml"; // 6. Check the document try { validator.validate(source); System.out.println(input + " is valid."); }
計(jì)算機(jī)等級(jí)考試二級(jí)Java經(jīng)典算法大全匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |