膨大な数の要素および関連する属性を表すXSDファイルが提供されています。 xsd.exeを使用してCSクラスを作成しました。可変XML要素を使用したXSDからのXMLの逆シリアル化
作成される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ファイルは、大手メーカーが製造しているため、変更できません。
詳細情報が必要な場合はお知らせください。
ありがとうございます! Brad
問題が何ですか? xsdはSpecTypeに対して 'minOccurs = "0"'を返します。つまり、xsd.exeによって生成されたオブジェクトには、null可能なSpecType(int ?, stringなど)が含まれていますか?もしそうなら、あなたの(*)回線はなぜ機能しませんか?例外/問題とは何ですか? xsdで 'minOccurs = "0"'と表示されない場合、デシリアライゼーションがクラッシュすることが予想されます。 –
こんにちはMartin: 。なぜそれがその行で壊れているのか分かりません。それはすべきだと思われますが、おそらくそれは私が働いていない構文です... –