我的应用程序根据 XSD(在 jar 中)验证 XML :
private Document createAndValidate(Schema schema) throws IOException, SAXException, ParserConfigurationException {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setValidating(false); // DTD validation
documentBuilderFactory.setNamespaceAware(false);
documentBuilderFactory.setSchema(schema);
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
documentBuilder.setErrorHandler(new SaxErrorHandler());
return documentBuilder.parse(file.toFile());
}
Run Code Online (Sandbox Code Playgroud)
到目前为止效果很好。
但由于使用引用的 XSD(可以在本地计算机上的任何位置)创建 XML 更容易,因此 XML 开始如下:
<?xml version="1.0" encoding="UTF-8"?>
<Definition
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="C:\definition_schema.xsd">
Run Code Online (Sandbox Code Playgroud)
现在,当我的应用程序解析该 XML 文件时,由于此 XSD 引用而无法验证:
cvc-complex-type.3.2.2:属性“xsi:noNamespaceSchemaLocation”不允许出现在“定义”中
我试图添加<xs:attribute name="xsi:noNamespaceSchemaLocation" type="xs:string" />到Definition元素,但该属性名称无效。
在我(重新)打开和验证它之前,我可以打开 XML 文件并删除该属性。但必须有更好的解决方案。
我该如何处理?
xmlns:xsi是命名空间声明,因此更改为setNamespaceAware(true).
将其设置为false,这两个属性只是名称中包含 a 的通用属性:。使用true,:成为命名空间前缀 (xmlns和xsi) 和命名空间属性之间的分隔符。
您当然还需要添加一个xmlns="http://example.org/MyNamespace"属性,以匹配模式的目标命名空间。
| 归档时间: |
|
| 查看次数: |
517 次 |
| 最近记录: |