2009-05-19 25 views
35

Come posso creare un file xml in modo dinamico, con la seguente struttura?Aggiunta di attributi a un nodo XML

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

io non sono in grado di creare gli attributi all'interno del tag id (cioè username = "" e la password = "").

Sto usando C# in un'applicazione Windows.

Alcuni namespace importante che si può richiedere è

using System.Xml; 
using System.IO; 

risposta

68

Beh id in realtà non è il nodo principale: Login è.

Dovrebbe essere solo il caso di specificare gli attributi (non i tag, btw) utilizzando XmlElement.SetAttribute. Non hai specificato come stai creando il file, sia che tu stia utilizzando XmlWriter, il DOM o qualsiasi altra API XML.

Se potessi fornire un esempio del codice che non funziona, sarebbe di grande aiuto. Nel frattempo, ecco qualche codice che crea il file che hai descritto:

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

l'ultimo modo e presumibilmente più per costruire il XML è quello di utilizzare 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"); 

Presumibilmente questo modo di codifica dovrebbe essere più semplice, poiché il codice assomiglia molto all'output (che l'esempio di Jon sopra non fa). Tuttavia, ho scoperto che mentre scrivevo questo esempio relativamente facile, ero incline a perdere la strada tra il carico di virgola che devi percorrere. La spaziatura automatica del codice di Visual Studio non aiuta neanche.

+4

+1 per la nuova hotness –

23

C'è anche un modo per aggiungere un attributo a un oggetto XmlNode, che può essere utile in alcuni casi.

Ho trovato questo altro metodo su 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); 

[...] 
Problemi correlati