LINQ to XML で XMLファイル を 編集、書き込み する 方法

0 件のコメント

XDocument を利用して、XMLファイルを編集、保存する方法を掲載します。

サンプル XML

<?xml version="1.0" encoding="utf-8" ?>
<users>
  <user user_uid="hoge"
        user_name="hoge"
        email=""
        application_name=""
        comment=""
        password="foobar"
        password_question=""
        password_answer=""
        is_approved="true"
        last_activity_date="2014/04/01 12:00:00"
        last_login_date="2014/04/05 12:00:00"
        last_password_changed_date="2014/04/01 12:00:00"
        creation_date="2014/04/01 12:00:00"
        is_online="false"
        is_lockedout="false"
        last_lockedout_date="0001/01/01 00:00:00"
        failed_password_attempt_count=""
        failed_password_attempt_window_start=""
        failed_password_answer_count=""
        failes_password_answer_window_start=""
        />
</users>

サンプル コード

using System;
using System.Linq;
using System.Xml;
using System.Xml.Linq;

public override void UpdateUser(MembershipUser user)
{
    // ファイルパス
    var filepath = @"C:\xxx.xml";

    // XMLファイル読み込み
    var xdoc = XDocument.Load(filepath );

    // LINQで選択
    var target = (from item in xdoc.Descendants("user")
                  where item.Attribute("user_uid").Value == user.ProviderUserKey.ToString()
                  select item).Single();

    // 情報の更新
    target.SetAttributeValue("user_name", user.UserName);
    target.SetAttributeValue("email", user.Email);
    target.SetAttributeValue("comment", user.Comment);
    target.SetAttributeValue("is_approved", user.IsApproved);
    target.SetAttributeValue("is_lockedout", user.IsLockedOut);
    target.SetAttributeValue("is_online", user.IsOnline);
    target.SetAttributeValue("last_activity_date", user.LastActivityDate);
    target.SetAttributeValue("last_lockedout_date", user.LastLockoutDate);
    target.SetAttributeValue("last_login_date", user.LastLoginDate);

    // ファイル書き込み設定
    var setting = new XmlWriterSettings()
    {
        NewLineChars = Environment.NewLine,
        Indent = true,
        NewLineOnAttributes = true,
        OmitXmlDeclaration = false
    };

    // ファイルへオブジェクトを書き込み(シリアライズ)
    using (var writer = XmlWriter.Create(filepath, setting))
    {
        xdoc.Save(writer);
    }
}

関連記事

参考記事