Добавление атрибутов в узел XML - PullRequest
45 голосов
/ 19 мая 2009

Как я могу динамически создать файл 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;

Ответы [ 3 ]

78 голосов
/ 19 мая 2009

Ну, 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");
    }
}
31 голосов
/ 19 мая 2009

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

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

28 голосов
/ 14 мая 2014

Существует также способ добавить атрибут к объекту 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);

[...]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...