Tengo el siguiente tipo complejo en mi esquema XML:Cómo utilizar tipos complejos con xs: any/## cualquiera y mixto en el código generado por la herramienta XSD
<xs:complexType name="Widget" mixed="true">
<xs:sequence>
<xs:any namespace="##any" processContents="skip" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
El elemento en XML derivado podría contener cadena o podría contener XML bien formado, por lo tanto, el atributo mixto es verdadero.
Cuando ejecuto esto a través de la herramienta XSD .NET me sale el siguiente código generará:
public partial class Widget{
private System.Xml.XmlNode[] anyField;
/// <remarks/>
[System.Xml.Serialization.XmlTextAttribute()]
[System.Xml.Serialization.XmlAnyElementAttribute()]
public System.Xml.XmlNode[] Any {
get {
return this.anyField;
}
set {
this.anyField = value;
}
}
}
La pregunta que tengo es que no estoy del todo seguro de cómo entonces debería usar este. En última instancia lo que necesito para ser capaz de establecer el valor del widget a cualquiera:
<widget>Hello World!</widget>
o
<widget>
<foo>Hello World</foo>
</widget>
Ambos de los cuales validar agaisnt el esquema
Eso no funcionará, no has inicializado xmlWidget.Any [0]. Entonces arrojaría una excepción de referencia nula. – MrEyes
Actualicé mi respuesta para tratar las NullReferenceExceptions. Sin embargo, no estoy seguro de que pueda cumplir la opción de "solo texto interno". hacer esto en el código significaría que la clase Widget podría funcionar como un tipo de cadena, así como una matriz de Nodos. No creo que esto sea posible con la generación estándar de XSD. – pmartin
Hice una edición que es bastante similar al código que publicaste. No estoy seguro de que vas a encontrar una forma diferente de hacer esto. Realmente, intentas anular la propiedad del widget. En una instancia, desea que sea solo una cadena y en otras instancias desea una matriz de nodos, pero no puede definir una propiedad del mismo nombre varias veces en una sola clase. – pmartin