web-dev-qa-db-fra.com

comment changer les valeurs de noeud XML

J'ai un XML (c'est exactement à quoi ça ressemble):

<PolicyChangeSet schemaVersion="2.1" username="" description="">
    <Attachment name="" contentType="">
        <Description/>
        <Location></Location>
    </Attachment>
</PolicyChangeSet>

Ceci est sur la machine de l'utilisateur.

J'ai besoin d'ajouter des valeurs à chaque nœud: nom d'utilisateur, description, nom de pièce jointe, type de contenu et emplacement.

Voici ce que j'ai jusqu'à présent:

string newValue = string.Empty;
            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.Load(filePath);
            XmlNode node = xmlDoc.SelectSingleNode("/PolicyChangeSet");
            node.Attributes["username"].Value = AppVars.Username;
            node.Attributes["description"].Value = "Adding new .tiff image.";
            node.Attributes["name"].Value = "POLICY";
            node.Attributes["contentType"].Value = "content Typeeee";

            //node.Attributes["location"].InnerText = "zzz";

            xmlDoc.Save(filePath);

De l'aide?

9
Testifier

Avec XPath. XmlNode node = xmlDoc.SelectSingleNode("/PolicyChangeSet"); sélectionne votre nœud racine.

13
Jan

Compris avec ça - 

xmlDoc.Load(filePath);
            XmlNode node = xmlDoc.SelectSingleNode("/PolicyChangeSet");
            node.Attributes["username"].Value = AppVars.Username;
            node.Attributes["description"].Value = "Adding new .tiff image.";

            node = xmlDoc.SelectSingleNode("/PolicyChangeSet/Attachment");
            node.Attributes["name"].Value = "POLICY";
            node.Attributes["contentType"].Value = "content Typeeee";
xmlDoc.Save(filePath);
3
Testifier
xmlDoc.SelectSingleNode("/PolicyChangeSet/Attachment/Description").InnerText = "My Desciption";
xmlDoc.SelectSingleNode("/PolicyChangeSet/Attachment/Location").InnerText = "My Location";
2
Ramzay

Utilisez LINQ To XML :)

XDocument doc = XDocument.Load(path);
IEnumerable<XElement> policyChangeSetCollection = doc.Elements("PolicyChangeSet");

foreach(XElement node in policyChangeSetCollection)
{
   node.Attribute("username").SetValue(someVal1);
   node.Attribute("description").SetValue(someVal2);
   XElement attachment = node.Element("attachment");
   attachment.Attribute("name").SetValue(someVal3);
   attachment.Attribute("contentType").SetValue(someVal4);
}

doc.Save(path);
2
Nickon
For setting value to XmlNode: 
 XmlNode node = xmlDoc.SelectSingleNode("/PolicyChangeSet");
            node["username"].InnerText = AppVars.Username;
            node["description"].InnerText = "Adding new .tiff image.";
            node["name"].InnerText = "POLICY";
            node["contentType"].InnerText = "content Typeeee";

For Getting value to XmlNode: 
username=node["username"].InnerText 
0
Mohan Krishna Eluri

Dans votre méthode SelectSingleNode, vous devez fournir une expression XPath pour rechercher le nœud que vous souhaitez sélectionner. Si vous utilisez Google XPath, vous trouverez de nombreuses ressources à ce sujet.

http://www.csharp-examples.net/xml-nodes-by-name/

Si vous devez les ajouter à chaque nœud, vous pouvez commencer en haut et parcourir tous les enfants.

http://msdn.Microsoft.com/en-us/library/system.xml.xmlnode.aspx

0
Robert Zahm