更新XML属性

时间:2015-01-14 22:54:05

标签: c# xml visual-studio-2010

我创建了一个更新XML中某些属性的函数,但如果index为0则更新正常,但如果大于0,则传递的索引超出范围

    public void updateAtributexml(string value, int index)
    {
        string folder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
        string file = "settings.xml";
        string specificFolder = Path.Combine(folder, "DesktopCleaner");

        XmlDocument xmlDoc = new XmlDocument();

        xmlDoc.Load(specificFolder + "\\" + file);

        XmlNode node = xmlDoc.SelectSingleNode("DesktopCleaner/Settings/Setting");
        node.Attributes[index].Value = value;

        xmlDoc.Save(specificFolder + "\\" + file);

    }

我的xml是:

<?xml version="1.0" encoding="UTF-8"?>
<DesktopCleaner>
  <Settings>
    <Setting updateChecker="1" />
    <Setting desktopFolder="0" />
    <Setting downloadsFolder="0" />
    <Setting customFolder="0" />
  </Settings>
</DesktopCleaner>

2 个答案:

答案 0 :(得分:2)

您的代码存在的问题是总是选择第一个Setting元素:

<Setting updateChecker="1" />

此元素只有一个属性,因此如果index大于0,则会出现错误。

所以,而不是:

XmlNode node = xmlDoc.SelectSingleNode("DesktopCleaner/Settings/Setting");
node.Attributes[index].Value = value;

使用:

 XmlNode node = xmlDoc.SelectSingleNode("DesktopCleaner/Settings");
 node.ChildNodes[index].Attributes[0].Value = value;

答案 1 :(得分:0)

每个设置节点只有一个属性,因此0是唯一有效的索引。