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 版本檢查一個無效文檔時的典型輸出。
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.
改變驗證所依據(jù)的模式、要驗證的文檔甚至使用的模式語言都很簡單。但無論什么情況,驗證都需要經(jīng)過下列五個步驟:
為編寫模式所用的語言加載一個模式工廠。
編譯源文件中的模式。
用編譯后的模式創(chuàng)建一個驗證程序。
為需要驗證的文檔創(chuàng)建 Source 對象。StreamSource 通常最簡單。
驗證輸入的源文檔。如果文檔無效,validate() 方法將拋出 SAXException。否則什么也不顯示。
可以反復(fù)使用同一個驗證程序和同一個模式多次。但是所有類都不是線程安全的或者可重入的。如果用多個線程同時驗證,一定要保證每個線程有自己的 Validator 和 Schema 對象。
用文檔指定的模式驗證
有些文檔指定了希望作為驗證基礎(chǔ)的模式,一般使用 xsi:noNamespaceSchemaLocation 和/或 xsi:schemaLocation 屬性來指定,比如:
// 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."); }
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |