Как изменить содержание элементов и атрибутов - PullRequest
0 голосов
/ 28 ноября 2010

Я нашел много примеров этого с использованием XmlNodeList, но, к сожалению, WP7 не поддерживает это, поэтому я немного озадачен.

У меня есть XML-документ, который выглядит примерно так

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

Мне нужно иметь возможность изменить идентификатор пользователя на другое значение, а также разрешить изменение имени пользователя.

Я также хотел бы иметь возможность удалить элемент с идентификатором пользователя, например, 50.

Любая помощь очень ценится!

Спасибо

Ответы [ 2 ]

2 голосов
/ 28 ноября 2010

Вот несколько различных техник, использующих 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");
    }                
}
0 голосов
/ 28 ноября 2010

Использовать 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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...