Pregunta

Se me ha dado un archivo XSD que representa un gran número de elementos y atributos asociados. He creado una clase de CS utilizando xsd.exe.

El problema es que el código XML que se crea puede contener cualquiera o todos los elementos y atributos.

Ejemplo XML:

<App action="A" id="1" validate="yes"><ProductType id="5885"/><SpecType id="221"/><Qty>1</Qty><PartType id="7212"/><Part>456789</Part></App>
<App action="A" id="2" validate="yes"><ProductType id="5883"/><Qty>1</Qty><PartType id="7211"/><Part>132465</Part></App>

A continuación, en mi código:

protected static void ImportProduct(string filename)
{
var counter = 0;
var xSerializer = new XmlSerializer(typeof(ProductList));
var fs = new FileStream(String.Format("{0}{1}", FilePath, filename), FileMode.Open);
var reader = XmlReader.Create(fs);
var items = (ProductList)xSerializer.Deserialize(reader);

foreach (var record in items.App)
{
    counter++;

    Console.Write(String.Format("{0}{1}", record.ProductType.id, Environment.NewLine));
    Console.Write(String.Format("{0}{1}", record.Part.Value, Environment.NewLine));

    *if (!record.SpecType.Value.Equals(null))
        Console.Write(String.Format("{0}{1}", record.SpecType.id, Environment.NewLine));
    else
        Console.Write(String.Format("{0}{1}", "No SpecType!", Environment.NewLine));

    if (counter == 10)
        break;
}

}

Así que mi pregunta es ¿cómo puedo comprobar si hay un elemento vacío / inexistente, por la línea de estrellado (*) anterior.

No puede cambiar los archivos XML xsd o fuente de cualquier manera, ya que son producidos por los principales fabricantes.

Avísame si necesita más información.

Gracias! Brad

¿Fue útil?

Solución

Lo sentimos, xsd.exe y la serialización XML no se va a tratar con XML así.

XML de esa naturaleza se crea porque alguien piensa que debe ser fácil para los seres humanos leen y escriben en. No piensan acerca de si las máquinas serán capaces de usarlos. Es un error que ahora tendrá que pagar.

Lo mejor que podría hacer sería la creación de una XSLT que colocar los elementos en un orden canónico, a continuación, crear un XSD que representa ese orden y crear clases de la XSD.

Otros consejos

Una vez que tenga un XSD que podría utilizar el conjunto de datos XML en lugar del lector. Luego hay algunos métodos automáticos creados para comprobar valores nulos como se ve en el siguiente ejemplo.

por ejemplo. Este en un ejemplo en el que CalcualtionAnalysisDS es el XSD.

        CalcualtionAnalysisDS ds = new CalcualtionAnalysisDS();
        ds.ReadXml("calc.xml");

        foreach (CalcualtionAnalysisDS.ReportRow row in ds.Report.Rows)
        {
            if (row.IsBestSHDSLDesignClassNull)
            {

            }
        }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top