使用 Java 加载 XML 架构时出错
Error loading XML schema with Java
我正在尝试解析使用 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 声明的问题,但我不知道我的文档中代码的可比较部分在哪里。
当您试图从 URI 为 http://www.khronos.org/files/collada_schema_1_4.xsd.
的文档创建新模式对象时,会出现错误消息
错误消息所抱怨的数据似乎很可能是从该 URI 检索到的数据。您是否尝试取消引用 URI?你得到了什么?
我得到的是一个 404 伴随着一个 HTML 错误页面,它开始于:
<!DOCTYPE html>
这不是合法的 XML 文档类型声明,因此不可能是合法的 XSD 模式文档的开头。错误消息没有提供很好的问题诊断(它表明输入确实有一个 public 标识符和一个系统标识符,但它们缺少分隔空格,而基本问题是两者都不存在完全没有),但修复与错误消息的详细信息无关。解决方法是为要加载的架构文档找到正确的 URI:http://www.khronos.org/files/collada_schema_1_4
而不是 http://www.khronos.org/files/collada_schema_1_4.xsd
.
我正在尝试解析使用 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 声明的问题,但我不知道我的文档中代码的可比较部分在哪里。
当您试图从 URI 为 http://www.khronos.org/files/collada_schema_1_4.xsd.
的文档创建新模式对象时,会出现错误消息错误消息所抱怨的数据似乎很可能是从该 URI 检索到的数据。您是否尝试取消引用 URI?你得到了什么?
我得到的是一个 404 伴随着一个 HTML 错误页面,它开始于:
<!DOCTYPE html>
这不是合法的 XML 文档类型声明,因此不可能是合法的 XSD 模式文档的开头。错误消息没有提供很好的问题诊断(它表明输入确实有一个 public 标识符和一个系统标识符,但它们缺少分隔空格,而基本问题是两者都不存在完全没有),但修复与错误消息的详细信息无关。解决方法是为要加载的架构文档找到正确的 URI:http://www.khronos.org/files/collada_schema_1_4
而不是 http://www.khronos.org/files/collada_schema_1_4.xsd
.