我有以下XSD
<xs:schema targetNamespace="http://microsoft.com/schemas/VisualStudio/TeamTest/2010" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Product">
<xs:complexType>
<xs:all>
<xs:element name="ProductColor" minOccurs="0" nillable="true" />
<xs:element name="ProductID" minOccurs="1" maxOccurs="1" type="xs:unsignedByte" />
<xs:element name="ProductName" minOccurs="1" maxOccurs="1" type="xs:string" />
<xs:element name="ProductNumber" minOccurs="1" maxOccurs="1" type="xs:string" />
<xs:element name="ProductPrice" minOccurs="1" maxOccurs="1" type="xs:decimal" />
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
我正在使用该XSD验证以下XML
<Product xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<ProductID>1</ProductID>
<ProductName>Adjustable Race</ProductName>
<ProductNumber>AR-5381</ProductNumber>
<ProductPrice>5.48</ProductPrice>
</Product>
它给出了验证错误。
元素&#39;产品&#39;在命名空间 &#39; http://microsoft.com/schemas/VisualStudio/TeamTest/2010&#39;无效 子元素&#39; ProductID&#39;在命名空间 &#39; http://microsoft.com/schemas/VisualStudio/TeamTest/2010&#39 ;.清单 可能的元素:&#39; ProductID,ProductName,ProductPrice, ProductNumber,ProductColor&#39;。
XML格式不正确吗?
答案 0 :(得分:1)
使用当前架构,期望每个Product
子元素不会绑定到命名空间。
如果您的意图是所有Product
元素子元素都应该位于targetNamespace中,就像Product
元素一样,您需要指明它们应该限定。默认行为是不合格。
您可以使用default="qualified"
属性在每个元素上指定:
<xs:element name="ProductColor" default="qualified" minOccurs="0" nillable="true" />
或者您可以使用xs:schema
属性在elementFormDefault="qualified"
元素上全局指定它:
<xs:schema targetNamespace="http://microsoft.com/schemas/VisualStudio/TeamTest/2010"
xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="Product">
<xs:complexType>
<xs:all>
<xs:element name="ProductColor" minOccurs="0" nillable="true" />
<xs:element name="ProductID" minOccurs="1" maxOccurs="1" type="xs:unsignedByte" />
<xs:element name="ProductName" minOccurs="1" maxOccurs="1" type="xs:string" />
<xs:element name="ProductNumber" minOccurs="1" maxOccurs="1" type="xs:string" />
<xs:element name="ProductPrice" minOccurs="1" maxOccurs="1" type="xs:decimal" />
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>