2009-10-07 2 views
3

ok, donc, j'ai un fichier xml qui ressemble à ceci:champ XML de remplacement en C#

<?xml version="1.0"?> 
<Users> 
    <User ID="1"> 
    <nickname>Tom</nickname> 
    <password>a password</password> 
    <host>[email protected]</host> 
    <email>anemail</email> 
    <isloggedin>false</isloggedin> 
    <permission>10</permission> 
    </User> 
    <User ID="2"> 
    <nickname>ohai</nickname> 
    <password>sercret</password> 
    <host>[email protected]</host> 
    <email>[email protected]</email> 
    <isloggedin>false</isloggedin> 
    <permission>1</permission> 
    </User> 
<Users> 

maintenant, tout d'abord, je vais avoir un retour de ce que leur numéro d'identification est, donc, avoir mal " 2 ". À partir de là, je devrai entrer et éditer les champs, et réenregistrer le fichier XML. Donc, fondamentalement, ce dont j'ai besoin, c'est d'ouvrir le fichier, trouver les informations pour User ID = "2", et réenregistrer le xml, avec DIFFERENT valeurs à l'intérieur de l'utilisateur 2, sans affecter le reste du document.

examlpe:

<User ID="2"> 
    <nickname>ohai</nickname> 
    <password>sercret</password> 
    <host>[email protected]</host> 
    <email>[email protected]</email> 
    <isloggedin>false</isloggedin> 
    <permission>1</permission> 
    </User> 

// faire les modifications ici, et finissent avec

<User ID="2"> 
    <nickname>ohai</nickname> 
    <password>somthing that is different than before</password> 
    <host>the most current host that they were seen as</host> 
    <email>[email protected]</email> 
    <isloggedin>false</isloggedin> 
    <permission>1</permission> 
    </User> 

etc.

Résumé: i besoin d'ouvrir un fichier texte, le retour informations via numéro d'identification, modifier les informations, enregistrer à nouveau le fichier. sans affecter autre chose que l'utilisateur 2

~ Merci!

Répondre

4

Il y a plusieurs façons dont vous pouvez le faire - est avec un XmlDocument, qui travaille dans 1.x et .NET, et fonctionne très bien aussi longtemps que votre document XML est pas trop long:

// create new XmlDocument and load file 
XmlDocument xdoc = new XmlDocument(); 
xdoc.Load("YourFileName.xml"); 

// find a <User> node with attribute ID=2 
XmlNode userNo2 = xdoc.SelectSingleNode("//User[@ID='2']"); 

// if found, begin manipulation  
if(userNo2 != null) 
{ 
    // find the <password> node for the user 
    XmlNode password = userNo2.SelectSingleNode("password"); 
    if(password != null) 
    { 
     // change contents for <password> node 
     password.InnerText = "somthing that is different than before"; 
    } 

    // find the <host> node for the user 
    XmlNode hostNode = userNo2.SelectSingleNode("host"); 
    if(hostNode != null) 
    { 
     // change contents for <host> node 
     hostNode.InnerText = "the most current host that they were seen as"; 
    } 

    // save changes to a new file (or the old one - up to you) 
    xdoc.Save("YourFileNameNew.xml"); 
} 

Si vous utilisez .NET 3.5 et supérieur, vous pouvez également vérifier dans Linq-to-XML pour un moyen encore plus facile de manipuler votre document XML.

Marc

0

Vous pouvez utiliser XmlDocument pour cela:

var doc = new XmlDocument(); 
doc.Load("1.xml"); 
var node = doc.SelectSingleNode(@"//User[@ID='2']"); 
node.SelectSingleNode("password").InnerText="terces"; 
doc.Save("1.xml"); 
+0

'node.SelectSingleNode ("mot de passe") InnerText' cela est dangereux si aucun noeud "mot de passe" peut être trouvé - vous aurez. claquer dans une NullReferenceException –

+0

Oui, vous avez raison. Je l'ai omis dans cet exemple pour la brièveté, mais ce serait mieux si j'avais écrit plus d'échantillon sujet aux erreurs. –