0

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);
4

2 に答える 2