2016-05-25 12 views
1

Ich möchte einige generische und unbekannte XML-Inhalte in meinem eigenen XML enthalten. Daher möchte ich die Validierung eines bestimmten Knotens in meiner XML-Datei überspringen.XSD überspringen Validierung der gesamten Struktur unter einem bestimmten Knoten

Ich versuche, den gesamten Inhalt unter meinem Knoten parentField von Validierung mit dem folgenden XSD übersprungen zu bekommen. Aber es scheint, dass es nur die erste Ebene meines XML-Teilbaums als Teil von parentField überspringt. Gibt es Lösungen, um eine generische XML als Teil Ihrer eigenen XML-Datei zu verwenden, die xs:any oder andere vorgeschlagene Hacks wie das Einfügen als CDATA verwendet?

<xs:complexType name="MyType" final=""> 
    <xs:all minOccurs="0"> 
    <xs:element name="parentField"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:any minOccurs="0" processContents="skip"/> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    </xs:all> 
</xs:complexType> 

Antwort

1

Ihr Beispiel ist in der Tat, die Validierung einer ganzen Struktur unterhalb des parentField Element überspringen, weil die Nutzung des Portals xs:any mit @processContents="skip", vorausgesetzt, es ist nur ein einziges Kind unter parentField da maxOccurs standardmäßig 1 und vorausgesetzt, es gibt keinen gemischten Text unter parentField.

die Unterkünfte für die beiden oben genannten Bestimmungen zu machen,

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="r" type="MyType"/> 
    <xs:complexType name="MyType" final=""> 
    <xs:all minOccurs="0"> 
     <xs:element name="parentField"> 
     <xs:complexType mixed="true"> 
      <xs:sequence> 
      <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/> 
      </xs:sequence> 
     </xs:complexType> 
     </xs:element> 
    </xs:all> 
    </xs:complexType> 
</xs:schema> 

wird vollständiger unter parentField beliebigen Markup

<?xml version="1.0" encoding="UTF-8"?> 
<r> 
    <parentField> 
    <v/> 
    All 
    <x> 
     of this 
     <y> 
     content 
     <z>is now allowed</z> 
     under parentField. 
     </y> 
    </x> 
    </parentField> 
</r> 

wie gewünscht ermöglichen.

+1

Wie Sie geschrieben haben, war das Problem die Begrenzung von maxOccurs auf 1, da ich mehrere Kinder habe. Perfekt danke! – dabadu