2016-05-25 8 views
1

Я хотел бы включить некоторый общий и неизвестный XML-контент в свой собственный XML. Поэтому я хотел бы пропустить проверку конкретного узла в файле XML.XSD пропускает проверку всей структуры под заданным узлом

Я пытаюсь получить весь контент под моим узлом parentField, пропустив проверку, используя следующий XSD. Но кажется, что он пропускает первый уровень моего поддерева XML как часть parentField. Есть ли какие-либо решения включить общий XML как часть вашего собственного XML, используя xs:any или другие предложенные хаки, такие как вставка его как CDATA?

<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> 

ответ

1

Ваш пример не, на самом деле, пропустить проверку целой структуры под parentField элемента из-за вашего использования xs:any с @processContents="skip", при условии, что есть только один ребенок в возрасте до parentField начиная с maxOccurs по умолчанию для 1, и при условии, что нет смешанного текста под parentField.

Заставить помещения для двух вышеуказанных положений,

<?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> 

будет более полно позволяет произвольную разметку под parentField

<?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> 

по запросу.

+1

как вы писали, проблема заключалась в ограничении maxOccurs на 1, поскольку у меня есть несколько дочерних элементов. Отлично, спасибо! – dabadu