- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下代码在 oracle jre 中运行良好,但在 ibm jre 中运行不佳(尝试版本 5、6 和 7)。该代码只是针对 xsd 验证一些 xml。
这是一个已知的错误吗?是否有需要设置的神奇属性或功能?
public static void main(String[] args) throws Exception {
String xsd = "<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">"+
"<xsd:element name=\"comment\" type=\"xsd:string\"/>" +
"</xsd:schema>";
String xml = "<comment>test</comment>";
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = builder.parse(new InputSource(new StringReader(xml)));
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema( new StreamSource(new StringReader(xsd)));
Validator validator = schema.newValidator();
Source source = new DOMSource(document);
validator.validate(source);
System.out.println("ok");
}
异常(exception):
Exception in thread "main" org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'comment'.
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
如果我将文档转换为字符串并使用 StreamSource,我可以绕过此错误。但我想直接验证该文件。这个示例再简单不过了,应该可以在 IBM JRE 上运行,不是吗?
最佳答案
您需要调用DocumentBuilderFactory.setNamespaceAware(true)
.
这是必要的,因为您使用的是基于命名空间的 XML 架构,即使没有命名空间 URL。 Oracle JRE 显然很宽松,并且在没有该属性的情况下支持它,而 IBM JRE 则更严格一些,即 <comment>
没有命名空间(false)和 <comment>
no 命名空间 (true) 被认为是不同的。
将代码更改为:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
关于java - IBM JRE : validate DOMSource with xsd doesn't work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32187365/
我有一个由 URIResolver 传递的 XML 作为 jdom2 Document,需要将其转换为 DOMSource。 但我不知道如何才能做到这一点。我知道 org.w3c.dom.Node 可
我需要一些帮助。在我的 String 文件数据变量中,我存储了一个 XML 文档。现在我想将此变量转换为 DOMSource 类型并使用此代码: DocumentBuilder db = Docume
我需要将 DOMSource 转换为 StreamSource,因为第三方库只接受 SOAP 的流源。 在这种情况下,性能并不是什么大问题,所以我想出了这组极其冗长的命令: DOMSource src
以下代码在 oracle jre 中运行良好,但在 ibm jre 中运行不佳(尝试版本 5、6 和 7)。该代码只是针对 xsd 验证一些 xml。 这是一个已知的错误吗?是否有需要设置的神奇属性或
当我运行一个简单的函数来更新没有 jars 的 DOM XML 时,它运行正确。如果我将它的代码放入一个有很多 jar 的现有项目中,我会得到这个异常 Exception in thread "mai
我正在尝试转换以下 XML Ren1 ren1@gmail.com 999-999-9999 www.ren1.com
使用 dom4j DOMDocument 提供 validator.validate(DOMSource) 在 java 1.6 中失败(不允许 xsi:noNamespaceSchemaLocati
我是一名优秀的程序员,十分优秀!