我遇到嵌套xsd文件的问题。我有这3个文件:Company.xsd Product.xsd和Person.xsd。
Company.xsd
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.company.org"
xmlns="http://www.company.org"
elementFormDefault="qualified">
<xsd:include schemaLocation="Person.xsd"/>
<xsd:include schemaLocation="Product.xsd"/>
<xsd:element name="Company">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Person" type="PersonType"
maxOccurs="unbounded"/>
<xsd:element name="Product" type="ProductType"
maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
Product.xsd
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xsd:complexType name="ProductType">
<xsd:sequence>
<xsd:element name="Type" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
Person.xsd
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xsd:complexType name="PersonType">
<xsd:sequence>
<xsd:element name="Name" type="xsd:string"/>
<xsd:element name="SSN" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
我尝试验证这个简单的XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<Company>
<Person>
<Name>Test</Name>
<SSN>test</SSN>
</Person>
<Product>
<name>Test</name>
</Product>
</Company>
但我有这个错误:cvc-elt.1:找不到元素'公司'的声明。
你知道为什么吗?
有人能帮帮我吗?
答案 0 :(得分:1)
您需要包含命名空间:
<Company xmlns="http://www.company.org">
... <!-- rest of XML --->
您的XML中也存在一些错误,但是一旦您从验证器获得更合理的输出,它就应该足够简单来修复它们。
答案 1 :(得分:1)
首先,您的测试XML存在错误。这样:
<Product>
<name>Test</name>
</Product>
应该是
<Product>
<Type>Test</Type>
</Product>
此外,您的XML标记缺少名称空间声明。如果没有名称空间声明,则假定标记根本不属于任何名称空间。由于您的模式将标记放在特定的命名空间中(使用URI http://www.company.org
),因此如果XML能够验证,您的XML需要执行相同的操作。
例如,您可以在<Company>
标记中执行此操作:
<?xml version="1.0" encoding="UTF-8"?>
<Company xmlns="http://www.company.org">
....
</Company>
在此之后,一切都验证正常。
答案 2 :(得分:0)
This example将向您展示如何使用JAXP解析根据您的XSD架构验证XML文件。