2012-07-23 17 views
9

Tengo un método en una aplicación C# que valida un archivo XML de entrada de usuario contra un XSD incrustado. Funciona muy bien, pero requiere que todos los elementos secundarios estén en el orden exacto definido en el XSD. Para mí, sin embargo, el orden no importa mientras existan los elementos.Validar XML contra XSD e ignorar el orden de los elementos secundarios

Por ejemplo, si tuviera la siguiente XSD ...

<xs:element maxOccurs="unbounded" name="ParentElement"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="FirstChildElement" type="xs:string" /> 
     <xs:element name="SecondChildElement" type="xs:string" /> 
     <xs:element name="ThirdChildElement" type="xs:string" /> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

Y un XML como este ...

<ParentElement> 
    <FirstChildElement>someValue</FirstChildElement>   
    <ThirdChildElement>someValue</ThirdChildElement> 
    <SecondChildElement>someValue</SecondChildElement> 
</ParentElement> 

Si Validé que me gustaría conseguir un error porque el los elementos secundarios están fuera de servicio.

¿Puedo hacer algún cambio en el XSD así que la validación solo se preocupa si los elementos existen, y que están bajo el padre correcto, pero no en qué orden están?

Respuesta

20

Secuencia significa que los elementos deben aparecer en el orden específico. Probablemente quieras xs: todos. Eche un vistazo a http://www.w3schools.com/xml/schema_complex_indicators.asp

+0

Gracias, esa es la respuesta. Mi VSD fue generado por VS, por lo que tenía todo los elementos secundarios bajo una etiqueta de Secuencia. – Jim

+1

Un punto a recordar es que xs: all solo admite un máximo de oportunidades de 1 y no más de eso. Sin embargo, esto se ha eliminado en el procesador XSD 1.1, que todavía está en la etapa beta. – vanval

+0

¿Alguna vez lanzaron 1.1? – ppumkin

Cuestiones relacionadas