我正在使用以下代碼根據指定的XML架構驗證XML文檔(.gpx)。我將模式本地存儲爲.xsd文件。問題是,這種方法使用互聯網連接來驗證架構。有沒有一種方法可以在不使用互聯網連接的情況下完成? (鑑於我在本地存儲XML模式的事實)。使用SAXParser離線驗證XML(gpx)架構
代碼:
public static boolean validate(String XmlDocumentUrl, String SchemaUrl) {
SAXParser parser = new SAXParser();
try {
parser.setFeature("http://xml.org/sax/features/namespaces", true);
parser.setFeature("http://xml.org/sax/features/validation", true);
parser.setFeature(
"http://apache.org/xml/features/validation/schema", true);
parser.setFeature(
"http://apache.org/xml/features/validation/schema-full-checking",
false);
parser.setProperty(
"http://apache.org/xml/properties/schema/external-schemaLocation",
SchemaUrl);
Validator handler = new Validator();
parser.setErrorHandler(handler);
parser.parse(XmlDocumentUrl);
if (handler.validationError == true){
System.out.println("XML Document has Error:"
+ handler.validationError + ""
+ handler.saxParseException.getMessage());
return false;
}
else{
System.out.println("XML Document is valid");
return true;
}
} catch (java.io.IOException ioe) {
System.out.println("IOException" + ioe.getMessage());
} catch (SAXException e) {
System.out.println("SAXException" + e.getMessage());
}
return false;
}
感謝和問候,
斯托
感謝您的回答。然而,當我使用這個:parser.setProperty( \t \t \t \t \t 「http://apache.org/xml/properties/schema/external-schemaLocation」, \t \t \t \t \t 「文件://」 + SchemaUrl);問題依然存在。當我離線時它會返回錯誤 – Petar 2012-01-10 20:33:33
那麼它取決於schemaUrl是什麼。它還有一個http://嗎? – Dave 2012-01-10 21:25:17
不,它只是一個包含模式名稱(和路徑)的字符串。所以通過在前面添加「file://」,它應該變成「file://schema.xsd」。我在這裏錯過了什麼? – Petar 2012-01-10 22:13:23