我正在尝试根据在另一个XSD中导入的XSD验证我的XML。
请查看以下代码:
xml1.xml:
<e1 xmlns="n1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="n2 main.xsd">
</e1>
xsd1.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="n1"
elementFormDefault="qualified">
<xsd:element name="e1"/>
</xsd:schema>
main.xsd:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="n2"
elementFormDefault="qualified">
<xsd:import namespace = "n1" schemaLocation = "xsd1.xsd"/>
</xsd:schema>
验证xml1.xml(在使用xml工具的netbeans中或在java中)只需抛出:
cvc-elt.1: Cannot find the declaration of element 'e1'. [3]
可能是什么问题?
您的xsi:schemaLocation
型号需要调整。自动将XSD带入作用域的不是include语句;这是一个提示,说明对于给定的命名空间,验证可能能够找到合适的XSD。
当您声明xsi:schemaLocation="n2 main.xsd"
时,您暗示在main.xsd中查找n2
名称空间,但您没有提及与根元素实际关联的n1
名称空间。验证遇到n1
名称空间中的根元素,查阅您的提示,一无所获,并告诉您:
cvc-elt.1: Cannot find the declaration of element 'e1'. [3]
正如它应该做的那样。您的前进道路是明确的:为根元素的n1
命名空间添加提示:
xsi:schemaLocation="n2 main.xsd n1 xsd1.xsd"
并且您的XML文档将成功验证。