トップ回答者
linq to xmlで値更新

質問
-
お世話になってます。
VS2015・C#・WPFアプリにて開発を行っています。
作成中のソフトに設定項目が色々あって、それをXMLで管理しています。設定項目を変更すると値を更新しなければならないのですが、同名同深度のタグが複数あるとお手上げな感じです。
タグが一個の時は下記サイトのコードをパクって(日曜大工系です、見逃してください)なんとかなりました。
http://devlights.hatenablog.com/entry/20121204/p1
今考えているのは
<root>
<child></child>
<child></child>
<child></child>
</root>
のような場合に、childタグに対して1個1個値を設定していく方法です。
よろしくお願いします。
回答
-
ToListメソッドでListに変換することで指数で要素を取得設定できます。
private void button1_Click(object sender, EventArgs e) { var root = BuildSampleXml(); var childs = root.Elements("child").ToList(); // 値の取得 Console.WriteLine(childs[0]); // 値の設定 childs[0].Value = "子供"; Console.WriteLine(root); // 要素の追加 root.Add(new XElement("child", "追加")); Console.WriteLine(root); } XElement BuildSampleXml() { return XElement.Parse("<root><child>hoge1</child><child>hoge2</child><child>hoge3</child></root>"); }
- 回答としてマーク ハードボイルド探偵 2016年3月9日 7:23
すべての返信
-
ToListメソッドでListに変換することで指数で要素を取得設定できます。
private void button1_Click(object sender, EventArgs e) { var root = BuildSampleXml(); var childs = root.Elements("child").ToList(); // 値の取得 Console.WriteLine(childs[0]); // 値の設定 childs[0].Value = "子供"; Console.WriteLine(root); // 要素の追加 root.Add(new XElement("child", "追加")); Console.WriteLine(root); } XElement BuildSampleXml() { return XElement.Parse("<root><child>hoge1</child><child>hoge2</child><child>hoge3</child></root>"); }
- 回答としてマーク ハードボイルド探偵 2016年3月9日 7:23
-
お世話になってます。
どうも、ピンポイントの解答ありがとうございます。おかげで先に進めそうなイメージです。
m(_ _;)m
こちらとしてはfor文とかで複数のタグに順次データを設定していくということを考えています。kenjinoteさんの解答は非常にありがたいです。ElementAtを試してみましたが、これはこれで良い感じです。勉強がてら使わせて頂こうと思います。m(_ _;)m
linq to xmlの使い方よくわからんです。ネット公開のコードをパクってやるだけはやれそうなのですが、何ともしっくり来ません。Amazonに複数の書籍が登録されていますが、レビューの評価が悪くて何ともかんともです。