LINQ to XML を使用して XML ドキュメント ドキュメントを生成しています。XML ドキュメントを最小限に抑えたい、つまり、めったに使用されないプロパティを省略したい。現在、私は次のようにしています:
XElement element = new XElement("myelement",
new XAttribute("property1", value1),
new XAttribute("property2", value2));
if (!string.IsNullOrEmpty(rareValue1))
{
element.Add(new XAttribute("rareProperty1", rareValue1));
}
if (!string.IsNullOrEmpty(rareValue2))
{
element.Add(new XAttribute("rareProperty2", rareValue2));
}
if (!string.IsNullOrEmpty(rareValue3))
{
element.Add(new XAttribute("rareProperty3", rareValue3));
}
しかし実際には、"if" ステートメントを省略したい場合は、これらのステートメントはあまり洗練されておらず、Creating Trees in XML で説明されているように、入れ子にすることで XML ツリーを簡単に作成できる LINQ to XML の哲学と矛盾するためです。だから、私はこのようなことをしたいと思います:
XElement element = new XElement("myelement",
new XAttribute("property1", value1),
new XAttribute("property2", value2),
new XAttribute("rareProperty1", string.IsNullOrEmpty(rareValue1) ? Flag.Omit : rareValue1),
new XAttribute("rareProperty2", string.IsNullOrEmpty(rareValue2) ? Flag.Omit : rareValue1),
new XAttribute("rareProperty3", string.IsNullOrEmpty(rareValue3) ? Flag.Omit : rareValue1),
);
つまり、C# ソース コードには、myelement
そのコンストラクター内のすべての子属性が含まれています。またFlag.Omit
、XML 属性を生成しないように LINQ-to-XML に指示する方法もあります。
これは、標準の LINQ to XML または一般的なユーティリティ関数で可能ですか?