2010-12-08 12 views
0

Ich habe folgende xml:XSD mit erforderlichen Elementen und unbekannten Elementen

<product> 
<name>beef</name> 
<category>food</category> 
<unknownfield1>..</unknownfield1> 
<unknownfield2>..</unknownfield2> 
</product> 

ich diese XML validieren muß das Root-Element, um sicherzustellen, Produkt ist und es enthält den erforderlichen Elemente Namen und Kategorie. Der Haken ist, dass es nicht immer wie im obigen Beispiel strukturiert ist. Es könnte so sein.

<product> 
<category>food</category> 
<unknownfield4>..</unknownfield4> 
<name>beef</name> 
<unknownfield4>..</unknownfield4> 
</product> 

Wenn die Struktur nur knapp sein Ziel ändern, ich die folgende verwenden:

<xs:element name="product"> 
<xs:complexType> 
<xs:sequence> 
<xs:element name="name" type="xs:string" /> 
<xs:element name="category" type="xs:string" /> 
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"></xs:any> 
</xs:sequence> 
</xs:complexType> 
</xs:element> 

aber das offensichtlich nicht funktioniert, wenn die Elementfolge ist nicht bekannt. Jede Hilfe zu diesem wird geschätzt.

Antwort

0

Hier ist ein Beispiel-Schema, das gegen beide der Beispiel-XML-Dateien validieren werden Sie bereitgestellt:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<xs:element name="unknownfield4"/> 
<xs:element name="unknownfield2"/> 
<xs:element name="unknownfield1"/> 
<xs:element name="product"> 
    <xs:complexType> 
     <xs:choice> 
      <xs:sequence> 
       <xs:element ref="name"/> 
       <xs:element ref="category"/> 
       <xs:any maxOccurs="unbounded"/> 
      </xs:sequence> 
      <xs:sequence> 
       <xs:element ref="category"/> 
       <xs:any/> 
       <xs:element ref="name"/> 
       <xs:any/> 
      </xs:sequence> 
     </xs:choice> 
    </xs:complexType> 
</xs:element> 
<xs:element name="name"> 
    <xs:simpleType> 
     <xs:restriction base="xs:string"/> 
    </xs:simpleType> 
</xs:element> 
<xs:element name="category"> 
    <xs:simpleType> 
     <xs:restriction base="xs:string"/> 
    </xs:simpleType> 
</xs:element> 

Hoffnung, die hilft !!

+1

aber das gesamte Element akzeptiert nicht jedes Element, das wegen der unbekannten Elemente benötigt wird. – jeslas

+0

Es ist chaotisch, aber Sie können '' Elemente zwischen jedem bekannten Element hinzufügen. – pmartin

+0

Ich denke nicht, dass das auch funktionieren würde. Manchmal kommt das name-Element vor das category-Element und manchmal umgekehrt. Kannst du ein Beispiel geben, das mit den 2 xml Beispielen in der Frage funktioniert? – jeslas

Verwandte Themen