none
linq to xmlで値更新 RRS feed

  • 質問

  • お世話になってます。

    VS2015・C#・WPFアプリにて開発を行っています。

    作成中のソフトに設定項目が色々あって、それをXMLで管理しています。設定項目を変更すると値を更新しなければならないのですが、同名同深度のタグが複数あるとお手上げな感じです。

    タグが一個の時は下記サイトのコードをパクって(日曜大工系です、見逃してください)なんとかなりました。

    http://devlights.hatenablog.com/entry/20121204/p1

    今考えているのは

    <root>

           <child></child>

            <child></child>

            <child></child>

    </root>

    のような場合に、childタグに対して1個1個値を設定していく方法です。

    よろしくお願いします。

    2016年3月9日 1:19

回答

  • 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日 2:06

すべての返信

  • 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日 2:06
  • わざわざToListしなくても、ElementAt拡張メソッドで特定インデックスの要素を取得することは可能ですが…。

    // 正直なところ何が分からないのか分からないので…。


    • 編集済み Hongliang 2016年3月9日 2:15
    2016年3月9日 2:14
  • お世話になってます。

    どうも、ピンポイントの解答ありがとうございます。おかげで先に進めそうなイメージです。

    m(_ _;)m

    Hongliang様

    こちらとしてはfor文とかで複数のタグに順次データを設定していくということを考えています。kenjinoteさんの解答は非常にありがたいです。ElementAtを試してみましたが、これはこれで良い感じです。勉強がてら使わせて頂こうと思います。m(_ _;)m

    linq to xmlの使い方よくわからんです。ネット公開のコードをパクってやるだけはやれそうなのですが、何ともしっくり来ません。Amazonに複数の書籍が登録されていますが、レビューの評価が悪くて何ともかんともです。

    2016年3月9日 7:23