LINQ to XMLでの属性の追加について.
過去の内容は以下から見れます。よろしければご参照くださいませ。
XElementには、属性の追加を行うためのメソッドがいくつか存在します。
Add(object) SetAttributeValue(XName, object)
元定義は以下のようになっています。
XContainer.Add(object) XElement.SetAttributeValue(XName, object)
SetAttributeValueメソッドは、SetElementValueメソッドと
同じ動きをします。
- 属性が存在しない場合、新規追加される
- 属性が存在する場合、更新される
- 値としてnullを指定すると、削除される
以下、サンプルです。
#region LinqSamples-65 /// <summary> /// LINQ to XMLのサンプルです. /// </summary> /// <remarks> /// 属性追加系メソッドのサンプルです. /// </remarks> public class LinqSamples65 : IExecutable { public void Execute() { // // Add(object) // Addメソッドは、要素の設定にも属性の設定にも利用できる. // 注意点として、このメソッドは重複した属性を指定した場合に // InvalidOperationExceptionを発生させる。 // var root = BuildSampleXml(); var elem = root.Elements("Child").First(); elem.Add(new XAttribute("Id3", 400)); Console.WriteLine(root); try { // // すでに存在する属性をAddしようとすると // InvalidOperationExceptionが発生する. // elem.Add(new XAttribute("Id2", 500)); Console.WriteLine(root); } catch (InvalidOperationException invalidOpEx) { Console.WriteLine("[ERROR] {0}", invalidOpEx.Message); } Console.WriteLine("====================================="); // // SetAttributeValue(XName, object) // 動作的には、要素の値設定に利用する // SetElementValueメソッドと同じとなる。 // - 存在しない属性名称を指定すると追加される // - 存在する属性名称を指定すると更新される // - 値にnullを指定すると属性が削除される // root = BuildSampleXml(); elem = root.Elements("Child").First(); elem.SetAttributeValue("Id3", 400); Console.WriteLine(elem); elem.SetAttributeValue("Id3", 500); Console.WriteLine(elem); elem.SetAttributeValue("Id3", null); Console.WriteLine(elem); Console.WriteLine(root); Console.WriteLine("====================================="); } XElement BuildSampleXml() { return XElement.Parse("<Root><Child Id=\"100\" Id2=\"200\"><Value Id=\"300\">hoge</Value></Child></Root>"); } } #endregion
実行すると以下のようになります。
[ERROR] 属性が重複しています。 ===================================== hoge hoge hoge hoge ===================================== hoge
以下、参考リソースです.
- XContainer.Add メソッド (Object)
- XElement.SetAttributeValue メソッド
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場