[英]Adding attributes to an XML node
如何使用以下结构动态创建 xml 文件?
<Login>
<id userName="Tushar" passWord="Tushar">
<Name>Tushar</Name>
<Age>24</Age>
</id>
</Login>
我无法在id
标签内创建属性(即 userName="" 和 passWord="")。
我在 Windows 应用程序中使用 C#。
您可能需要的一些重要命名空间是
using System.Xml;
using System.IO;
那么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");
}
}
还有一种向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);
[...]
构造 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");
据说这种编码方式应该更容易,因为代码与输出非常相似(Jon 上面的例子没有)。 但是,我发现在编写这个相对简单的示例时,我很容易在您必须导航的逗号购物车之间迷失方向。 Visual Studio 的代码自动间距也无济于事。
您可以使用XmlAttribute类。
例如:
XmlAttribute attr = xmlDoc.CreateAttribute("userName");
attr.Value = "Tushar";
node.Attributes.Append(attr);
如果您序列化您拥有的对象,您可以通过在您想要指定为模型中的属性的每个属性上使用“ 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; }
}
然后您只需将一个名为“Login”的 LoginNode 实例序列化为 XML,就是这样!
这里有一些示例可以序列化和对象到 XML,但我建议创建一个扩展方法,以便可重用于其他对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.