xml文件中的自动增量ID值

时间:2014-02-26 18:30:14

标签: c# xml

我想在我的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#中做到?

4 个答案:

答案 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)

我想我需要更多信息......

乍一看,您似乎需要执行以下操作:

  1. 迭代/循环显示文本框和/或UpDown列表中的值。
  2. 确保你的循环有一个在循环“int counter = 1”之外创建的计数器变量。
  3. 对于您正在迭代的每个项目,使用计数器在您生成的xml中设置id。
  4. 在项目返回循环之前,您应该增加计数器+ 1。
  5. 您将使用正确的值自动填充每个节点吗?

    您需要的只是添加此计数器变量,您应该基本上拥有所需的内容。

答案 3 :(得分:0)

如果在执行程序期间从XML中删除节点,则使用计数来确定Id可能无法正常工作。

使用Guid.NewGuid()来创建唯一ID