XML 入力ファイルを解析するプログラムがあります。XML はやや壊れています。私はスキーマを開発しませんでしたし、XML を生成するプログラムを制御することもできません。これは、私が問題を抱えている XML のサンプルです。
<object type="vdisk" >
<property name="mdisk_grp_id" value="many" />
<property name="mdisk_grp_name" value="many" />
<property name="mdisk_grp_id" value="10" />
<property name="mdisk_grp_name" value="VMAX5161" />
</object>
問題は、同じ名前の複数のプロパティです。明らかにこれは正しくありません。値として「多く」を持たないものを選択する必要があります。現在、私のプログラムはそれが最初に発生するため、それを取得します。プログラム内の他のものを壊します。とりわけ、私が試したことは次のとおりです。これは、私の VDisk クラスのコンストラクターの部分的なリストです。入力ファイルの「vdisk」タイプのオブジェクトの一部では機能するようですが、他のオブジェクトでは機能しないようです。
public VDisk(XElement element)
{
var mdg = from mdgs in element.Descendants("property")
where
mdgs.Attribute("name").Value == "mdisk_grp_name"
select mdgs;
foreach (XElement mdgp in mdg)
{
if (mdgp.Attribute("value").Value != "many")
{
MDiskGrpName = mdgp.Attribute("value").Value;
break;
}
}
}
例外をスローするコードは次のとおりです。実際に「many」という名前の MDiskGroup はありません。そのため、var は空に戻ります。例外をキャッチして続行することもできますが、VDisk MDiskGroupName 属性に正しいデータを取得したいと考えています。
var mdiskgrp = CurrentCluster.MDiskGroups.Where(mdg => mdg.Name == vdisk.MDiskGrpName);
mdiskgrp.FirstOrDefault().VDiskList.Add(vdisk);