1

膨大な数の要素と関連する属性を表すXSDファイルが提供されました。xsd.exeを使用してCSクラスを作成しました。

問題は、作成される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またはソースXMLファイルは主要メーカーによって作成されているため、変更することはできません。

さらに情報が必要な場合はお知らせください。

ありがとう!ブラッド

4

2 に答える 2

2

申し訳ありませんが、XSD.EXEとXMLシリアル化はそのようなXMLを処理しません。

その性質のXMLは、人間が読みやすく入力しやすいはずだと誰かが考えているために作成されます。彼らは、マシンがそれらを使用できるかどうかについては考えていません。あなたが今お金を払わなければならないのは間違いです。

最善の方法は、要素を正規の順序で配置するXSLTを作成してから、その順序を表すXSDを作成し、XSDからクラスを作成することです。

于 2011-01-12T04:15:09.060 に答える
0

XSDを入手したら、XMLリーダーの代わりにデータセットを使用できます。次に、以下の例に示すように、nullをチェックするために作成されたいくつかの自動メソッドがあります。

例えば。これは、CalcualtionAnalysisDSがXSDである例です。

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

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

            }
        }
于 2011-01-12T01:08:11.603 に答える