2017-04-21 107 views
0

我有以下以下XSD模板:XSD选择可选元素

<xsd:choice>        
<xsd:element name="NilReport" type="ftc:CorrectableNilReport_Type"> 
    <xsd:annotation> 
     <xsd:documentation xml:lang="en">Nil Report indicates that financial institution does not have accounts to report</xsd:documentation> 
    </xsd:annotation> 
</xsd:element>       
<xsd:sequence >   
    <xsd:element name="AccountReport" type="ftc:CorrectableAccountReport_Type" minOccurs="0" maxOccurs="unbounded"> 
     <xsd:annotation> 
      <xsd:documentation>Detailed information for account report, such as account number and account balance</xsd:documentation> 
     </xsd:annotation> 
    </xsd:element> 
    <xsd:element name="PoolReport" type="ftc:CorrectablePoolReport_Type" minOccurs="0" maxOccurs="unbounded"> 
     <xsd:annotation> 
      <xsd:documentation>Information about the pool of account holders with similar characteristics</xsd:documentation> 
     </xsd:annotation> 
    </xsd:element>   
</xsd:sequence>    

但结果至今没有去,因为它假设是。 Unexpected result

这是我想要的结果: Expected result

我怎么能存档预期的结果?请指教我。

请注意,在这种情况下,两者都是可选的。

回答

0

当前,您可以选择使用其他两个元素在NilReport元素和序列之间进行选择。

如果您希望将其他两个元素作为“序列”的子元素,则必须创建一个包含元素,并且您需要将它们定义为该元素的子元素,如下所示。

<xsd:choice> 
     <xsd:element name="NilReport" type="ftc:CorrectableNilReport_Type"> 
      <xsd:annotation> 
       <xsd:documentation xml:lang="en">Nil Report indicates 
        that financial institution does not have accounts to report</xsd:documentation> 
      </xsd:annotation> 
     </xsd:element> 
     <xsd:element name="NotNilReport"> 
      <xsd:complexType> 
       <xsd:sequence> 
        <xsd:element name="AccountReport" type="ftc:CorrectableAccountReport_Type" 
         minOccurs="0" maxOccurs="unbounded"> 
         <xsd:annotation> 
          <xsd:documentation>Detailed information for account report, such 
           as account number and account balance</xsd:documentation> 
         </xsd:annotation> 
        </xsd:element> 
        <xsd:element name="PoolReport" type="ftc:CorrectablePoolReport_Type" 
         minOccurs="0" maxOccurs="unbounded"> 
         <xsd:annotation> 
          <xsd:documentation>Information about the pool of account holders 
           with similar characteristics</xsd:documentation> 
         </xsd:annotation> 
        </xsd:element> 
       </xsd:sequence> 
      </xsd:complexType> 
     </xsd:element> 
    </xsd:choice> 
+0

嗨@ophychius,我会很感激你的答案。如果不创建包含元素,我们是否真的没有其他方法来存档? –

+0

这取决于你想要达到什么目标,如果你想要一个可以包含NilReport或者PoolReport和/或AccountReport元素组合的元素,而不是你当前的xsd是可以的。它不允许组合NilReport和其他2个组合,同时允许0-n AccountReports和0-n PoolReports 如果您希望Account-和PoolReport在上述元素中组合在一起,您需要一个在NilReport和包含Account-和PoolReport元素的'NotNilReport'之间进行选择。 也许试着解释你想要达到的目标? – ophychius

+0

你上面的例子是完美的,但它不遵循其默认模式。所以它正确的xml应该是: FATCA1 XXXX \t XXXX \t \t \t XXX 3 ftc:AccountPoolReportType> FATCA201 33 **没有标记** –