次のコードを使用して、指定された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
それはどのようなschemaUrlが依存するかによって異なります。まだhttp://が入っていますか? – Dave
いいえ、それはスキーマの名前(およびパス)を含む単なるStringです。したがって、 "file://"を先頭に追加すると、 "file://schema.xsd"になります。私はここで何が欠けていますか? – Petar