2009-05-19 7 views
35

Как создать динамический XML-файл со следующей структурой?Добавление атрибутов в узел XML

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

Я не в состоянии создать атрибуты внутри тега id (т.е. UserName = "" и PASSWORD = "").

Я использую C# в приложении Windows.

Некоторые важные пространства имен, которые могут потребоваться в

using System.Xml; 
using System.IO; 

ответ

68

Ну id это на самом деле не корневой узел: Login есть.

Это должен быть случай указания атрибутов (не тегов, кстати) с использованием XmlElement.SetAttribute. Вы не указали, как вы создаете файл, но - используете ли вы XmlWriter, DOM или любой другой XML-API.

Если бы вы могли привести пример кода, который у вас есть, который не работает, это очень поможет. В то же время, вот некоторый код, который создает файл, описанный:

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

Самая последняя и предположительно самый лучший способ для построения XML является использование LINQ к 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"); 

Предположительно это способ кодирования должно быть проще, так как код очень похож на результат (чего не может привести пример Джона выше). Тем не менее, я обнаружил, что, кодируя этот относительно простой пример, я был склонен терять свой путь между загрузкой запятой, с которой вам приходится перемещаться. Автоматическое разграничение кода Visual Studio также не помогает.

+4

+1 для новой жары –

23

Существует также способ добавить атрибут к объекту XmlNode, который может быть полезен в некоторых случаях.

Я нашел этот другой метод на 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); 

[...] 
Смежные вопросы