XML XSD验证错误

时间:2015-09-03 20:45:50

标签: xml validation xsd

我有以下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格式不正确吗?

1 个答案:

答案 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>