web-dev-qa-db-fra.com

Ajout d'attributs à un nœud XML

Comment créer dynamiquement un fichier xml, avec la structure suivante?

<Login>
  <id userName="Tushar" passWord="Tushar">
      <Name>Tushar</Name>
      <Age>24</Age>
  </id>
</Login>

Je ne suis pas en mesure de créer les attributs à l'intérieur de la balise id (c'est-à-dire userName = "" et passWord = "").

J'utilise C # dans une application Windows.

Un espace de noms important dont vous pourriez avoir besoin est

using System.Xml;
using System.IO;
46
tushar

Eh bien, id n'est pas vraiment le nœud racine: Login l'est.

Il devrait simplement s'agir de spécifier les attributs (pas les balises, btw) en utilisant XmlElement.SetAttribute . Cependant, vous n'avez pas précisé comment vous créez le fichier, que vous utilisiez XmlWriter, le DOM ou toute autre API XML.

Si vous pouviez donner un exemple du code que vous avez qui ne fonctionne pas, cela aiderait beaucoup. En attendant, voici du code qui crée le fichier que vous avez décrit:

using System;
using System.Xml;

class Test
{
    static void Main()
    {
        XmlDocument doc = new XmlDocument();
        XmlElement root = doc.CreateElement("Login");
        XmlElement id = doc.CreateElement("id");
        id.SetAttribute("userName", "Tushar");
        id.SetAttribute("passWord", "Tushar");
        XmlElement name = doc.CreateElement("Name");
        name.InnerText = "Tushar";
        XmlElement age = doc.CreateElement("Age");
        age.InnerText = "24";

        id.AppendChild(name);
        id.AppendChild(age);
        root.AppendChild(id);
        doc.AppendChild(root);

        doc.Save("test.xml");
    }
}
79
Jon Skeet

La dernière et supposée meilleure façon de construire le XML est d'utiliser LINQ to XML:

using System.Xml.Linq

       var xmlNode =
            new XElement("Login",
                         new XElement("id",
                             new XAttribute("userName", "Tushar"),
                             new XAttribute("password", "Tushar"),
                             new XElement("Name", "Tushar"),
                             new XElement("Age", "24")
                         )
            );
       xmlNode.Save("Tushar.xml");

Soi-disant, cette façon de coder devrait être plus facile, car le code ressemble étroitement à la sortie (ce que l'exemple de Jon ci-dessus ne fait pas). Cependant, j'ai trouvé qu'en codant cet exemple relativement facile, j'étais enclin à perdre mon chemin entre les chargements de virgules dans lesquels vous devez naviguer. L'espacement automatique du code dans Visual Studio n'aide pas non plus.

33
Dabblernl

Il existe également un moyen d'ajouter un attribut à un objet XmlNode, qui peut être utile dans certains cas.

J'ai trouvé cette autre méthode sur msdn.Microsoft.com .

using System.Xml;

[...]

//Assuming you have an XmlNode called node
XmlNode node;

[...]

//Get the document object
XmlDocument doc = node.OwnerDocument;

//Create a new attribute
XmlAttribute attr = doc.CreateAttribute("attributeName");
attr.Value = "valueOfTheAttribute";

//Add the attribute to the node     
node.Attributes.SetNamedItem(attr);

[...]
29
Vito Gentile