更新 XML 个属性
Update XML attributes
我创建了一个函数来更新 XML 中的某些属性,但是如果索引为 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>
您的每个设置节点只有一个属性,因此 0 是唯一有效的索引。
您的代码的问题在于它总是 选择第一个 Setting
元素:
<Setting updateChecker="1" />
该元素只有一个属性,因此如果索引大于 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;
我创建了一个函数来更新 XML 中的某些属性,但是如果索引为 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>
您的每个设置节点只有一个属性,因此 0 是唯一有效的索引。
您的代码的问题在于它总是 选择第一个 Setting
元素:
<Setting updateChecker="1" />
该元素只有一个属性,因此如果索引大于 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;