LINQ to XMLでの存在確認系のプロパティについて.
過去の内容は以下から見れます。よろしければご参照くださいませ。
今回のHasElementsとHasAttributesはどちらも存在を確認するために利用するプロパティです。
名前が示す通り、HasElementsは子要素を持っているか否かを
HasAttributesは属性を持っているか否かを返します。
以下、サンプルです。
namespace Gsf.Samples { using System; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; #region LinqSamples-70 /// <summary> /// LINQ to XMLのサンプルです. /// </summary> /// <remarks> /// 存在確認プロパティ (HasElements, HasAttributes) のサンプルです. /// </remarks> public class LinqSamples70 : IExecutable { public void Execute() { // // HasElements // 名前の通り、現在のノードがサブノードを持っているか否かを取得する. // var root = BuildSampleXml(); var child = root.Elements("Child").First(); var grandChild = child.Elements("Value").First(); Console.WriteLine("root.HasElements: {0}", root.HasElements); Console.WriteLine("child.HasElements: {0}", child.HasElements); Console.WriteLine("grand-child.HasElements: {0}", grandChild.HasElements); Console.WriteLine("====================================="); // // HasAttributes // 名前の通り、現在のノードが属性を持っているか否かを取得する. // root = BuildSampleXml(); child = root.Elements("Child").First(); grandChild = child.Elements("Value").First(); Console.WriteLine("root.HasAttributes:{0}", root.HasAttributes); Console.WriteLine("child.HasAttributes:{0}", child.HasAttributes); Console.WriteLine("grand-child.HasAttributes:{0}", grandChild.HasAttributes); Console.WriteLine("====================================="); } XElement BuildSampleXml() { return XElement.Parse("<Root><Child Id=\"100\" Id2=\"200\"><Value Id=\"300\">hoge</Value></Child></Root>"); } } #endregion }
実行すると以下のようになります。
root.HasElements: True child.HasElements: True grand-child.HasElements: False ===================================== root.HasAttributes:False child.HasAttributes:True grand-child.HasAttributes:True =====================================
以下、参考リソースです.
- XElement.HasElements プロパティ
- XElement.HasAttributes プロパティ
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場