使用Java加载XML模式时出错

时间:2015-03-27 23:08:46

标签: java xml xsd dtd xml-dtd

我正在尝试解析使用this schema,但是我收到以下错误:

org.xml.sax.SAXParseException; systemId: http://www.khronos.org/files/collada_schema_1_4.xsd; lineNumber: 1; columnNumber: 50; White spaces are required between publicId and systemId.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:441)
    ...

以下是我的代码的相关部分:

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();

dbFactory.setValidating(true);

SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
URL schemaURL = new URL("http://www.khronos.org/files/collada_schema_1_4.xsd");
Schema schema = sf.newSchema(schemaURL); //Line causing error
dbFactory.setSchema(schema);

DocumentBuilder docBuilder = dbFactory.newDocumentBuilder();
Document doc = docBuilder.parse(file);

doc.getDocumentElement().normalize();

This question表示所有xsi:schemaLocation之间应该有空格,但它们之间已经有空格。一些评论暗示它可能是Eclipse的问题,这绝对是一种可能性。

This question说这是doctype声明的问题,但我不知道我的文档中可比较的代码部分在哪里。

1 个答案:

答案 0 :(得分:0)

当您尝试从URI为http://www.khronos.org/files/collada_schema_1_4.xsd的文档中创建新架构对象时,会出现错误消息。

错误消息抱怨的数据似乎很有可能是从该URI检索到的数据。您是否尝试过取消引用URI?你得到了什么?

我得到的是404伴随着HTML错误页面的开头:

<!DOCTYPE html>

这不是合法的XML文档类型声明,因此不可能是合法的XSD架构文档的开头。错误消息并未提供对问题的非常好的诊断(它表明输入确实具有公共标识符和系统标识符,但是当基本问题是根本不存在时,它们缺少分隔的空白空间),但修复程序与错误消息的详细信息无关。解决方法是为要加载的架构文档找到正确的URI:http://www.khronos.org/files/collada_schema_1_4而不是http://www.khronos.org/files/collada_schema_1_4.xsd