我想在我的xml文件中添加一个新节点,但是,我想在其中添加id值,但是从最后一个值增加1。这是我的XML:
<users>
<user>
<id>1</id>
<name>Name1</name>
<surname>Surname1</surname>
<weight>78</weight>
<height>180</height>
</user>
<user>
<id>2</id>
<name>Name2</name>
<surname>Surname2</surname>
<weight>84</weight>
<height>180</height>
</user>
</users>
到目前为止,这是我的代码(用于添加新节点):
XmlNode node = xmlDoc.SelectSingleNode("/users/user");
XmlNode newNode = xmlDoc.ImportNode(node, true);
xmlDoc.DocumentElement.AppendChild(newNode);
xmlDoc.SelectSingleNode("users/user/id").InnerText = ; // <-- ??
xmlDoc.SelectSingleNode("users/user/name").InnerText = nameBox.Text;
xmlDoc.SelectSingleNode("users/user/surname").InnerText = surnameBox.Text;
xmlDoc.SelectSingleNode("users/user/weight").InnerText = Convert.ToString(weightUpDown.Value);
xmlDoc.SelectSingleNode("users/user/height").InnerText = Convert.ToString(heightUpDown.Value);
我在C#中使用winforms,在这种情况下从文本框和UpDown列表中获取值。 我怎么能在c#中做到?
答案 0 :(得分:4)
您可以使用LINQ to XML
。首先获取当前元素数,然后插入一个新元素:
var xDoc = XDocument.Load("path");
var count = xDoc.Descendants("user").Count();
var newUser = new XElement("user",
new XElement("id", count+1),
new XElement("name", nameBox.Text),
new XElement("surname", surnameBox.Text),
new XElement("weight", weightUpDown.Value),
new XElement("height", heightUpDown.Value));
xDoc.Root.Add(newUser);
xDoc.Save(path);
我建议你先获取元素数(可能在Form_load中),然后将其存储到变量中。通过这样做,每次要添加新项时都不需要执行此查询。您只需要增加伯爵。
答案 1 :(得分:1)
您可以按如下方式获取最大ID:
var maxId = xmlDoc.SelectNodes("/users/user/id")
.Cast<XmlNode>()
.Max(node => int.Parse(node.InnerText));
答案 2 :(得分:0)
我想我需要更多信息......
乍一看,您似乎需要执行以下操作:
您将使用正确的值自动填充每个节点吗?
您需要的只是添加此计数器变量,您应该基本上拥有所需的内容。
答案 3 :(得分:0)
使用Guid.NewGuid()
来创建唯一ID