应用程序根据 XSD 验证 XML:允许在 XML 中引用 XSD
Application validates XML against XSD: allow XSD reference in XML
我的应用程序根据 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());
}
到目前为止一切正常。
但是由于使用引用的 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">
现在,当我的应用程序解析那个 XML 文件时,由于这个 XSD 引用而无法验证:
cvc-complex-type.3.2.2: Attribute 'xsi:noNamespaceSchemaLocation' is
not allowed to appear in 'Definition'
我试图将 <xs:attribute name="xsi:noNamespaceSchemaLocation" type="xs:string" />
添加到 Definition
元素,但该属性名称无效。
我可以打开 XML 文件并删除属性,然后再(重新)打开并验证它。但一定有更好的解决办法。
我该如何处理?
xmlns:xsi
是命名空间声明,所以改成setNamespaceAware(true)
.
设置为false
后,这两个属性只是通用属性,其名称恰好包含一个:
。使用 true
,:
成为命名空间前缀(xmlns
和 xsi
)和命名空间属性之间的分隔符。
您当然还需要添加一个 xmlns="http://example.org/MyNamespace"
属性,以匹配模式的目标命名空间。
我的应用程序根据 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());
}
到目前为止一切正常。
但是由于使用引用的 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">
现在,当我的应用程序解析那个 XML 文件时,由于这个 XSD 引用而无法验证:
cvc-complex-type.3.2.2: Attribute 'xsi:noNamespaceSchemaLocation' is not allowed to appear in 'Definition'
我试图将 <xs:attribute name="xsi:noNamespaceSchemaLocation" type="xs:string" />
添加到 Definition
元素,但该属性名称无效。
我可以打开 XML 文件并删除属性,然后再(重新)打开并验证它。但一定有更好的解决办法。
我该如何处理?
xmlns:xsi
是命名空间声明,所以改成setNamespaceAware(true)
.
设置为false
后,这两个属性只是通用属性,其名称恰好包含一个:
。使用 true
,:
成为命名空间前缀(xmlns
和 xsi
)和命名空间属性之间的分隔符。
您当然还需要添加一个 xmlns="http://example.org/MyNamespace"
属性,以匹配模式的目标命名空间。