2010-08-22 140 views
1

我有一個簡單的XML文件,其中包含3個基本元素。第一個是必需的(minOccurs = 1),第二個和第三個是可選的。但是,如果使用第二個元素,那麼我想要第三個元素。他是XML:使用第一個元素時,需要在XSD上創建第二個元素

<?xml version="1.0" encoding="utf-8" ?> 
<resultado> 
     <consulta fonte="1" origem="Origem">0</consulta> 
     <status resultado="REGULAR">0</status> 
     <informacoes> 
       <informacao tipo="CPF" dado="23340058865"></informacao> 
       <informacao tipo="Nome" dado="Nome Titular CPF"></informacao> 
       <informacao tipo="Endereco" dado="Rua Sem Fim, 48"></informacao> 
       <informacao tipo="Cidade" dado="Fim do Mundo"></informacao> 
       <informacao tipo="Estado" dado="TO"></informacao> 
       <informacao tipo="Cep" dado="93847832"></informacao> 
       <informacao tipo="Fone" dado="5938476354"></informacao> 
     </informacoes> 
</resultado> 

如果status元素傳遞,然後informacoes成爲一個必需的元素。
下面是我的XSD:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:simpleType name="codigoresultado"> 
     <xs:restriction base="xs:unsignedByte"> 
      <xs:enumeration value="0"/> 
      <xs:enumeration value="1"/> 
      <xs:enumeration value="2"/> 
      <xs:enumeration value="3"/> 
      <xs:enumeration value="4"/> 
     </xs:restriction> 
    </xs:simpleType> 
    <xs:simpleType name="resultadoconsulta"> 
     <xs:restriction base="xs:unsignedByte"> 
      <xs:enumeration value="0"/> 
      <xs:enumeration value="1"/> 
      <xs:enumeration value="2"/> 
      <xs:enumeration value="3"/> 
     </xs:restriction> 
    </xs:simpleType> 
    <xs:element name="resultado"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="consulta" minOccurs="1" maxOccurs="1"> 
        <xs:complexType> 
         <xs:simpleContent> 
          <xs:extension base="resultadoconsulta"> 
           <xs:attribute name="fonte" type="xs:integer" use="required" /> 
           <xs:attribute name="origem" type="xs:string" use="required" /> 
          </xs:extension> 
         </xs:simpleContent> 
        </xs:complexType> 
       </xs:element> 
       <xs:element name="status" minOccurs="0" maxOccurs="1"> 
        <xs:complexType> 
         <xs:simpleContent> 
          <xs:extension base="codigoresultado"> 
           <xs:attribute name="resultado" type="xs:string" use="required" /> 
          </xs:extension> 
         </xs:simpleContent> 
        </xs:complexType> 
       </xs:element> 
       <xs:element name="informacoes" minOccurs="0" > 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element minOccurs="1" maxOccurs="unbounded" name="informacao"> 
           <xs:complexType> 
            <xs:attribute name="tipo" type="xs:string" use="required" /> 
            <xs:attribute name="dado" type="xs:string" use="required" /> 
           </xs:complexType> 
          </xs:element> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

這可能嗎?如果是,如何? 謝謝!

+0

好主意Marc ......將其作爲回答發佈,所以我可以將其標記爲已回答,並且您將獲得信用。有效! – Pascal 2010-08-22 21:26:22

回答

1

我會看到的唯一方法是將這兩個元素捆綁成自己的<xs:sequence>,這是可選的。

如果存在,則兩個元素都必須存在(或兩者都可以省略)。

+0

我的另一種方式是將這兩個元素捆綁成一個 '''。這也需要兩個要素都存在,但也可以讓這兩個要素以任何順序出現。 – jasso 2010-08-23 14:46:38

相關問題