【问题标题】:XSD validation Error: s4s-elt-must-match errorXSD 验证错误:s4s-elt-must-match 错误
【发布时间】:2015-09-10 07:50:01
【问题描述】:

由于我是 xsd 的新手,请帮助解决以下 XSD 错误

示例 SOAP 响应 XML

 <ACCOUNTDETAILS>
 <STATUS></STATUS>
 <RESPONSE></RESPONSE>
 <ACCOUNTID>
 <DETAILS>
 <NAME></NAME>
 <CATEGORY></CATEGORY>
 <LASTMODIFIED></LASTMODIFIED>
  </DETAILS>
  </ACCOUNTID>
  </ACCOUNTDETAILS>

XSD 生成

<xsd:element name="AccountDetailsResponse">
  <xsd:element name="ACCOUNTDETAILS" type="account:Account">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element type="xsd:string" name="STATUS"/>
         <xsd:element type="xsd:string" name="RESPONSE"/>
         <xsd:element name="ACCOUNTID">
           <xsd:complexType>
             <xsd:sequence>
               <xsd:element name="DETAILS">
                 <xsd:complexType>
                   <xsd:sequence>
                     <xsd:element type="xsd:string" name="NAME"/>
                     <xsd:element type="xsd:string" name="CATEGORY"/>
                     <xsd:element type="xsd:string" name="LASTMODIFIED"/>
                   </xsd:sequence>
                 </xsd:complexType>
               </xsd:element>
             </xsd:sequence>
           </xsd:complexType>
         </xsd:element>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>
  </xsd:element>

XSD 错误:

s4s-elt-must-match.1:'AccountDetailsResponse'的内容必须匹配(注解?,(simpleType | complexType)?, (unique | key | keyref)*))。发现问题始于:元素。

提前致谢

【问题讨论】:

  • 您不能像使用 AccountDetailsResponseACCOUNTDETAILS 那样将 &lt;xsd:element&gt; 嵌套在 &lt;xsd:element&gt; 中。具体想做什么?定义元素类型?使用对另一个元素定义的引用?
  • 能否提供样品?谢谢
  • 在提供样品之前,您应该准确地说明您想做什么,您的困难是什么,等等。如果您需要教程,我不确定 SO 是否合适。

标签: xml xsd xsd-validation


【解决方案1】:

很可能您没有向我们提供完整的输入。从您的架构中,我希望您发布的摘录周围有一个元素 AccountDetailsResponse

正如您对其他元素的计算,您不能将 xs:element 作为另一个 xs:element 的直接子代。最有可能的是,使用与其他元素相同的方法(有序的子元素序列)会做你想做的事:

<xsd:element name="AccountDetailsResponse">
   <xsd:complexType>
      <xsd:sequence>
         <xsd:element name="ACCOUNTDETAILS" type="account:Account">
         ...

这也不起作用,因为您不能同时拥有type 属性和嵌入的xs:complexType。所以可能你会想要摆脱那个type 属性。所以以下应该工作:

<xsd:element name="AccountDetailsResponse">
   <xsd:complexType>
      <xsd:sequence>
         <xsd:element name="ACCOUNTDETAILS">
         ...

【讨论】:

    猜你喜欢
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多