2009-05-19 10 views
35

Comment créer un fichier XML de manière dynamique, avec la structure suivante?Ajout d'attributs à un nœud XML

<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 dans la balise id (à savoir userName = "" et PASSWORD = "").

J'utilise C# dans une application Windows.

Certains espace de noms est important que vous pourriez avoir besoin est

using System.Xml; 
using System.IO; 

Répondre

68

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

Il devrait juste s'agir de spécifier les attributs (pas de balises, btw) en utilisant XmlElement.SetAttribute. Cependant, vous n'avez pas spécifié 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 un 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"); 
    } 
} 
28

La façon la plus récente et soi-disant plus pour construire le XML est en utilisant 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 ce mode de codage devrait être plus facile, car le code ressemble beaucoup à la sortie (ce que l'exemple de Jon ci-dessus ne fait pas). Cependant, j'ai trouvé que tout en codant cet exemple relativement facile j'étais enclin à me perdre entre le panier de virgules que vous devez naviguer parmi. L'espacement automatique du code de Visual Studio n'aide pas non plus.

+4

+1 pour la nouvelle hotness –

23

Il existe également un moyen d'ajouter un attribut à un objet XmlNode, ce 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); 

[...] 
Questions connexes