2009-05-19 103 views
35

¿Cómo puedo crear un archivo xml de forma dinámica, con la siguiente estructura?Agregar atributos a un nodo XML

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

no soy capaz de crear los atributos dentro de la etiqueta id (es decir, usuario = "" y la contraseña = "").

Estoy usando C# en una aplicación de Windows.

Algunos espacio de nombres importantes que usted pueda necesitar es

using System.Xml; 
using System.IO; 

Respuesta

68

Bueno id no es realmente el nodo raíz: Login es.

Debería ser solo un caso de especificación de los atributos (no etiquetas, por cierto) usando XmlElement.SetAttribute. Sin embargo, no ha especificado cómo está creando el archivo, ya sea que esté usando XmlWriter, DOM o cualquier otra API XML.

Si pudiera dar un ejemplo del código que tiene que no funciona, eso ayudaría mucho. Mientras tanto, aquí hay un código que crea el archivo que describe:

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 forma más reciente y supuestamente más grande para construir el XML es mediante el uso de LINQ para 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"); 

Supuestamente esta forma de codificar debería ser más fácil, ya que el código se parece mucho a la salida (que el ejemplo anterior de Jon no). Sin embargo, descubrí que mientras codificaba este ejemplo relativamente fácil, era propenso a perderme entre el montón de comas que tienes que navegar. El espaciado automático del código de Visual Studio tampoco ayuda.

+4

+1 para el nuevo hotness –

23

También hay una manera de agregar un atributo a un objeto XmlNode, que puede ser útil en algunos casos.

Encontré este otro método en 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); 

[...] 
Cuestiones relacionadas