Java 使用SAXParser脱机验证XML(gpx)架构
我使用以下代码根据指定的XML模式验证XML文档.gpx。我将模式作为.xsd文件本地存储。问题是,此方法使用internet连接来验证模式。有没有一种不用上网的方法?考虑到我正在本地存储XML模式这一事实 守则:Java 使用SAXParser脱机验证XML(gpx)架构,java,xsd,validation,offline,gpx,Java,Xsd,Validation,Offline,Gpx,我使用以下代码根据指定的XML模式验证XML文档.gpx。我将模式作为.xsd文件本地存储。问题是,此方法使用internet连接来验证模式。有没有一种不用上网的方法?考虑到我正在本地存储XML模式这一事实 守则: public static boolean validate(String XmlDocumentUrl, String SchemaUrl) { SAXParser parser = new SAXParser(); try { parser
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;
}
感谢和问候
Petar使用文件://url引用本地架构。将架构指定为file://path/to/schema.xsd.您可以通过自己的DefaultHandler实现:
...SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
saxParser.parse(InputSource, new Defaulthandler() {
@Override
public InputSource resolveEntity(String publicId, String systemId)
throws IOException, SAXException {
InputStream is = ClassLoader.getSystemResourceAsStream("path_to_you_local_dtd_doc");
return is != null ? new InputSource(is) :
super.resolveEntity(publicId, systemId);
}
} )
谢谢你的回答。但是,当我使用以下内容时:parser.setProperty,file://+SchemaUrl;问题仍然存在。当我离线时它返回错误否,它只是一个包含模式名称和路径的字符串。因此,通过在前面添加file://,它应该file://schema.xsd . 我错过了什么?