LINQ to XMLでの空要素系のプロパティについて.
過去の内容は以下から見れます。よろしければご参照くださいませ。
今回のIsEmptyとEmptySequenceはどちらも空要素に関連するプロパティです。
EmptySequenceは文字通り空のシーケンスを返します。これはEnumerable.Emptyと同じようなものです。
IsEmptyは自分自身が空要素か否かを判定します。どのような要素が空要素と見なされるのかはMSDNに記載があります。
以下、(http://msdn.microsoft.com/ja-jp/library/system.xml.linq.xelement.isempty.aspx)より抜粋。
開始タグと終了タグの間に内容のない要素は、空の要素とは見なされません。長さのない内容を持っていることになります。
開始タグのみを持ち、終了した空の要素として表される要素だけが、空の要素と見なされます。
以下、サンプルです。
namespace Gsf.Samples { using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; #region LinqSamples-72 /// <summary> /// LINQ to XMLのサンプルです. /// </summary> /// <remarks> /// 空要素系プロパティとメソッド (IsEmpty, EmptySequence) のサンプルです. /// </remarks> public class LinqSamples72 : IExecutable { public void Execute() { // // EmptySequence // 空のIEnumerable<XElement>を返す静的メソッド. // var empty = XElement.EmptySequence; Console.WriteLine("Count={0}", empty.Count()); // // IsEmpty // 現在の要素が空要素か否かを判定する. // 空要素の条件は、MSDNに記載があり以下の通りとなる. // 「開始タグのみを持ち、終了した空の要素として表される要素だけが、空の要素と見なされます。」 // (http://msdn.microsoft.com/ja-jp/library/system.xml.linq.xelement.isempty.aspx) // var root = BuildSampleXmlNoNode(); Console.WriteLine("IsEmpty={0}", root.IsEmpty); root = BuildSampleXml(); Console.WriteLine("IsEmpty={0}", root.IsEmpty); } XElement BuildSampleXmlNoNode() { return new XElement("Root"); } XElement BuildSampleXml() { var root = new XElement("Root", new XElement("Child", "value1"), new XElement("Child", "value2"), new XElement("Child", "value3"), new XElement("Child", "value4") ); return root; } } #endregion }
実行すると以下のようになります。
Count=0 IsEmpty=True IsEmpty=False
以下、参考リソースです.
- XElement.IsEmpty プロパティ
- XElement.EmptySequence プロパティ
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場