如何更改元素和属性的内容

时间:2010-11-27 21:20:53

标签: c# xml silverlight linq windows-phone-7

我已经使用XmlNodeList找到了很多这样的例子,但遗憾的是WP7不支持这个,所以我有点难过。

我有一个看起来有点像这样的XML文档

<users>
    <user id="50">
        <username>testuser</username>
    </user>
</users>

我需要能够将用户ID更改为其他值,并且还允许更改用户名。

我还希望能够删除用户ID为50的元素。

任何帮助都非常有用!

由于

2 个答案:

答案 0 :(得分:2)

以下是一些不同的技术,全部使用XLinq(并在WP7上测试):

string usersXml = @"<users><user id=""50""><username>testuser</username></user><user id=""51""><username>jamie_user</username></user></users>";

XElement doc = XElement.Parse(usersXml);

// LINQ query syntax for find and removal
// Add reference to System.Xml.Linq and add using System.Xml.Linq and using System.Linq
var matchingUsers = from user in doc.Elements("user")
                    where (string)user.Attribute("id") == "50"
                    select user;
// remvoing the users
matchingUsers.Remove();

// another way to find the users...
doc = XElement.Parse(usersXml); // reload for demo
var matchingUsers2 = doc.Elements("user").Select(
    xUser => (string)xUser.Attribute("id") == "50");

// change the name
doc = XElement.Parse(usersXml); // reload for demo
matchingUsers = from user in doc.Elements("user")
                where (string)user.Attribute("id") == "50"
                select user;

// replacing the name ...
foreach (var user in matchingUsers)
{
    var usernameElement = user.Element("username");
    if (usernameElement != null) {
        usernameElement.SetValue("newUserName");
    }                
}

答案 1 :(得分:0)

使用LINQ to XML。

System.Xml.Linq添加到您的参考文献中。

XElement users = XElement.Load("{file}");

foreach (var user in users.Nodes()) 
{
    if(user.Attribute("id") == 50)
    {
         user.Attribute("id") = 10;
         user.Descendant("username") == "new User";
         //Or remove like this:
         user.Remove();
    }
}