当前位置: 首页 > 知识库问答 >
问题:

XSD错误:不需要此元素

郑波
2023-03-14

我正在编写XSD来验证XML,但在验证时出现了以下错误:

输出错误

使用XML架构验证当前文件:

错误:元素'{http://www.w3.org/2001/XMLSchema-instance}Gasto':不应使用此元素。预计为(加斯托)

...我不明白这个错误

以下是我的XML示例:

 <?xml version="1.0" encoding="UTF-8"?>
 <Armazem>  
    <Lista_Gastos xmlns:artGasto="http://www.w3.org/2001/XMLSchema-instance"     
        artGasto:noNamespaceSchemaLocation="TraXSD.xsd">
        <artGasto:Gasto id="50">
           <artGasto:nome>Robalo</artGasto:nome>
           <artGasto:quantidade>1</artGasto:quantidade>
       </artGasto:Gasto> 
    </Lista_Gastos>
 </Armazem>

下面是我的XSD示例:

 <?xml version="1.0" encoding="utf-8"?>
 <xsd:schema elementFormDefault="qualified" 
       attributeFormDefault="unqualified"
       xmlns:xsd="http://www.w3.org/2001/XMLSchema"
       xmlns:artGasto="http://www.w3.org/2001/XMLSchema-instance">
   <xsd:element name="Armazem">
        <xsd:complexType>
        <xsd:sequence>
               <xsd:element name="Lista_Gastos" 
                 type="TListGastos" maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:complexType>
  </xsd:element>   

<xsd:complexType name="TListGastos">
    <xsd:sequence >
        <xsd:element name="Gasto" type="TGasto" 
          maxOccurs="unbounded"/>
    </xsd:sequence>
</xsd:complexType> 


 <xsd:complexType name="TGasto">
    <xsd:sequence >
        <xsd:element name="nome" type="xsd:string" />
        <xsd:element name="quantidade" type="xs:integer" />
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:string" use="required"/>
</xsd:complexType> 

共有1个答案

浦德明
2023-03-14

意见:

  1. 元素的类型应该是xsd: integer,而不是xs: integer(仅仅因为在这种情况下被定义为命名空间前缀的是xsd)。
  2. 使用artGasto命名空间前缀来表示http://www.w3.org/2001/XMLSchema-instance充其量是无意义的,并且可能是对命名空间的误解的标志。在这里使用xsi
  3. 如果您想为某些元素使用名称空间,则不会使用特殊的http://www.w3.org/2001/XMLSchema-instance。由于您的命名空间意图如此不清楚,我现在已经为您删除了它们。

进行上述更改后,以下XML对以下XSD有效:

<?xml version="1.0" encoding="UTF-8"?>
<Armazem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="TraXSD.xsd">  
  <Lista_Gastos>
    <Gasto id="50">
      <nome>Robalo</nome>
      <quantidade>1</quantidade>
    </Gasto> 
  </Lista_Gastos>
</Armazem>
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema elementFormDefault="qualified" attributeFormDefault="unqualified"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="Armazem">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="Lista_Gastos" type="TListGastos" maxOccurs="unbounded"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>   

  <xsd:complexType name="TListGastos">
    <xsd:sequence >
      <xsd:element name="Gasto" type="TGasto" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType> 

  <xsd:complexType name="TGasto">
    <xsd:sequence >
      <xsd:element name="nome" type="xsd:string" />
      <xsd:element name="quantidade" type="xsd:integer" />
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:string" use="required"/>
  </xsd:complexType> 
</xsd:schema>
 类似资料: