2010-11-27 3 views
0

Ich habe viele Beispiele dafür mit XmlNodeList gefunden, aber leider unterstützt WP7 dies nicht, also bin ich ein bisschen ratlos.Wie ändere ich den Inhalt von Elementen und Attributen

Ich habe ein XML-Dokument, das wie dieses

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

Ich brauche ein bisschen sieht der Lage sein, die Benutzer-ID auf einen anderen Wert zu ändern, und damit auch der Benutzername geändert werden.

Ich möchte auch in der Lage sein, das Element mit der Benutzer-ID von 50 zum Beispiel zu entfernen.

Jede Hilfe ist sehr geschätzt!

Danke

Antwort

2

Hier ein paar verschiedene Techniken, die alle mit XLinq (und getestet auf 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

vielen Dank :) – Jamie

0

Verwenden Sie LINQ to XML.

Fügen Sie System.Xml.Linq zu Ihren Referenzen hinzu.

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(); 
    } 
} 
+0

Vielen Dank für die schnelle Antwort, jedoch wirft sie den Fehler: ' 'System.Xml.Linq. XNode 'enthält keine Definition für' Attribut 'und keine Erweiterungsmethode' Attribut ', die ein erstes Argument vom Typ' System.Xml.Linq.XNode 'akzeptiert.' Ich habe bereits System.Xml.Linq in meinen Referenzen. – Jamie

+0

Meine Syntax kann falsch sein, aber das ist das Konzept. –

+0

Verwenden Sie XAttribute für silverlight – Viren

Verwandte Themen