将属性添加到XML节点

48 c# xml

如何动态创建xml文件,具有以下结构?

<Login>
  <id userName="Tushar" passWord="Tushar">
      <Name>Tushar</Name>
      <Age>24</Age>
  </id>
</Login>
Run Code Online (Sandbox Code Playgroud)

我无法在id标记内创建属性(即userName =""和passWord ="").

我在Windows应用程序中使用C#.

您可能需要的一些重要命名空间是

using System.Xml;
using System.IO;
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 79

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");
    }
}
Run Code Online (Sandbox Code Playgroud)


Dab*_*rnl 33

构建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");
Run Code Online (Sandbox Code Playgroud)

据推测,这种编码方式应该更容易,因为代码非常类似于输出(Jon的上述例子没有).然而,我发现在编写这个相对简单的例子的过程中,我很容易在你必须导航的逗号之间迷失方向.Visual Studio的代码自动间隔也无济于事.


Vit*_*ile 30

还有一种向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);

[...]
Run Code Online (Sandbox Code Playgroud)


小智 12

您可以使用XmlAttribute类。

例如:

XmlAttribute attr = xmlDoc.CreateAttribute("userName");
attr.Value = "Tushar";

node.Attributes.Append(attr);
Run Code Online (Sandbox Code Playgroud)


Mau*_*tti 5

如果您序列化您拥有的对象,您可以通过在您想要指定为模型中的属性的每个属性上使用“ System.Xml.Serialization.XmlAttributeAttribute ”来执行类似的操作,在我看来这要容易得多:

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public class UserNode
{
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string UserName { get; set; }

    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string Password { get; set; }

    public int Age { get; set; }
    public string Name { get; set; }         
 }

 public class LoginNode 
 {
    public UserNode Id { get; set; }
 }
Run Code Online (Sandbox Code Playgroud)

然后,您只需将名为“Login”的 LoginNode 实例序列化为 XML,就这样!

这里有一些序列化和对象到 XML 的示例,但我建议创建一个扩展方法,以便可重用于其他对象。