Вопрос

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

Проблема в том, что созданный XML может содержать любые или все элементы и атрибуты.

Пример 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>

Тогда в моем коде:

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

}

Поэтому мой вопрос заключается в том, как я могу проверить на наличие пустого/ несуществующего элемента, согласно звездной (*) строке выше.

Я не могу изменить файлы XSD или Source XML каким -либо образом, так как они производятся крупными производителями.

Дайте мне знать, если вам нужно больше информации.

Спасибо! Брэд

Это было полезно?

Решение

Извините, XSD.Exe и XML -сериализация не будут иметь дело с XML.

XML такого рода создается потому, что кто -то думает, что людям должно быть легко читать и вводить. Они не думают о том, смогут ли машины их использовать. Это ошибка, за которую вам придется заплатить.

Лучшее, что вы могли бы сделать, - это создать XSLT, который поместит элементы в какой -то канонический заказ, а затем создаст XSD, представляющий этот порядок, и создать классы из XSD.

Другие советы

Как только у вас есть XSD, вы можете использовать набор данных вместо считывателя XML. Тогда есть несколько автоматических методов, созданных для проверки нулей, как показано в приведенном ниже примере.

например. Это в примере, где Calcualtionanalysisds является XSD.

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

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

            }
        }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top