<b>
<c>
<z> Wally </z>
<w> whatever </w>
</c>
<d>
<z> anotherValue </z>
</d>
<e> idValue </e>
</b>
class Example {
public string Id {get; set;}
public string name {get; set;}
}
上記のXMLとクラスがあるとします。私はLinQからXmlを使ってXMLからオブジェクトを作成しようとしています。私はこのようなものでこれを達成できる任意の点でnullになる可能性のある経路を指定するLinQ to xml
:これまでのところ
var doc = XDocument.Load(xmlPath);
var root = doc.Root;
var anExample = new Example()
{
Id = root.Element("e").Value,
name = root.Element("c").Element("z").Value
};
とても良い、問題は「C」と「Z」のタグがオプションであることです。あなたは 'c'や 'c'を 'z'なしに持つことはできません。 次に、ヌルオブジェクトに対してElementメソッドとValueプロパティを呼び出さないように、これらのタグのそれぞれがヌルであるかどうかを確認しています。
var doc = XDocument.Load(xmlPath);
var root = doc.Root;
var anExample = new Example(){ Id = root.Element("e").Value };
var c = root.Element("c")
if(c != null) {
var z = c.Element("z");
if(z != null)
anExample.name = z.Value;
}
を入れ子レベルが増加するにつれて、物事は最悪の取得: は私が意味します。私は、私が欲しいことをするための最も良い方法があると思います。
この構文はC#6.0以降で使用できます(演算子 '?.')。 – Tatranskymedved
@Tatranskymedvedこの素晴らしい修正をありがとう!私は私の答えを更新しました。 –
ありがとうございます。私はxpathを避け、Linqだけに焦点を当てようとしています。 null条件付き演算子は私にとって最良の選択肢と思われます。 – ricky