LINQ to XMLでの属性の更新について.
過去の内容は以下から見れます。よろしければご参照くださいませ。
XElementには、属性の更新を行うためのメソッドがいくつか存在します。
XAttribute.Value XAttribute.SetValue SetAttributeValue
SetAttributeValueメソッドは、SetElementValueメソッドと
同じ動きをします。
- 属性が存在しない場合、新規追加される
- 属性が存在する場合、更新される
- 値としてnullを指定すると、削除される
以下、サンプルです。
#region LinqSamples-66 /// <summary> /// LINQ to XMLのサンプルです. /// </summary> /// <remarks> /// 属性更新系メソッドのサンプルです. /// </remarks> public class LinqSamples66 : IExecutable { public void Execute() { // // XAttribute.Value // XElement.Attribute(XName)を利用すると // XAttributeオブジェクトが取得できる. // XAttribute.Valueプロパティに値を設定することで // 属性の値が更新できる. // // 尚、Valueプロパティはstring型のみを受け付ける仕様と // なっているので注意。 // var root = BuildSampleXml(); var elem = root.Elements("Child").First(); var attr = elem.Attribute("Id"); attr.Value = 500.ToString(); Console.WriteLine(root); Console.WriteLine("====================================="); // // XAttribute.SetValue // XAttribute.Valueと違い、こちらはobject型を受け付けるメソッド。 // 内部で変換が行われた後、値が設定される. // root = BuildSampleXml(); elem = root.Elements("Child").First(); attr = elem.Attribute("Id"); attr.SetValue(500); Console.WriteLine(root); Console.WriteLine("====================================="); // // SetAttributeValue // すでに存在する要素を指定して、本メソッドを実行すると // 属性の値が更新される. // root = BuildSampleXml(); elem = root.Elements("Child").First(); elem.SetAttributeValue("Id", 500); Console.WriteLine(root); Console.WriteLine("====================================="); } XElement BuildSampleXml() { return XElement.Parse("<Root><Child Id=\"100\" Id2=\"200\"><Value Id=\"300\">hoge</Value></Child></Root>"); } } #endregion
実行すると以下のようになります。
===================================== hoge ===================================== hoge ===================================== hoge
以下、参考リソースです.
- XAttribute.Value プロパティ
- XAttribute.SetValue メソッド
- XElement.SetAttributeValue メソッド
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場