XMLを解析して顧客のコレクションを返す汎用ユーティリティを作成しようとしています。異なるファイルのLINQ to XML
問題は、1つのファイルに1つの要素がないことです。
この種の状況がLINQを使用して処理できるかどうかは知りたいと思います。
通常のXPATHまたはXMLDocumentを使用している間は、これを無視したり、コードにデフォルト値を割り当てることができます。
ここに私のコードです。
マイXMLファイル
お客様1
<customers>
<customer>
<first_name>F1</first_name>
<last_name>L1</last_name>
</customer>
<customer>
<first_name>F2</first_name>
<last_name>L2</last_name>
</customer>
</customers>
カスタマー2
<?xml version="1.0" encoding="utf-8" ?>
<customers>
<customer>
<first_name>F1</first_name>
<middle_name>M1</middle_name>
<last_name>L1</last_name>
</customer>
<customer>
<first_name>F2</first_name>
<middle_name>M2</middle_name>
<last_name>L2</last_name>
</customer>
</customers>
私のクラス
public class Customer
{
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
}
これらのXMLファイルを解析するための私のコード
XDocument doc = XDocument.Load(@"D:\\Projects\\Customer1.xml");
var cCusts = from c in doc.Descendants("customer")
select new Customer
{
FirstName = c.Element("first_name").Value,
MiddleName = c.Element("middle_name").Value,
LastName = c.Element("last_name").Value,
};
私のコードを実行すると、 "オブジェクト参照が設定されていません"というエラーが発生します。要素を見つけることができません。
しかし、同じクエリを使用すると、要素が存在しないかどうかを実際に確認することはできますか?または、顧客1と2に対して別のコードを記述する必要がありますか?
これは完璧に動作します...ありがとう – A3006
ただ一つ..私はc.Element( "middle_name")+ "(文字列)の代わりに、コードがキャストに失敗した場合にエラーをスローしないことを確認するだけです?? – A3006
はいいつでも試すことができます:https://dotnetfiddle.net/9OLnvc – har07