NullReferenceException尝试更新XML C#时

时间:2016-09-07 14:23:12

标签: c# .net xml

我目前有一个Windows窗体应用程序,其中包含一个由用户更新的列表视图。更新列表视图时,它还会为项目填充和创建XML,并将其存储在隐藏文本框中,直到发送保存请求。

当发送保存请求时,我调用一个写入我的外部Config文件的函数来更新表示的属性。

总的来说,我更新了7个设置,但唯一一个因NullReferenceException而失败的是当我尝试更新列表视图并保存XML时

//The values I'm passing in are the path to my config file, the setting I am updating (in this case would be RequiredDocuments), and the string value to update.

public static void UpdateConfigFiles(string p_sPath, string p_sSettingName, string p_sValue)
{
    bool blnApplyChanges = false;
    System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();

    xmlDoc.Load(p_sPath);
    int iCurrentNode = 0;

    for (iCurrentNode = 0; iCurrentNode <= xmlDoc.ChildNodes[1]["applicationSettings"].ChildNodes[0].ChildNodes.Count - 1; iCurrentNode++)
        if (xmlDoc.ChildNodes[1]["applicationSettings"].ChildNodes[0].ChildNodes[iCurrentNode].Attributes[0].Value.ToString().ToUpper() == p_sSettingName.ToUpper())
    {
        //This line is where the exception occurs
        xmlDoc.ChildNodes[1]["applicationSettings"].ChildNodes[0].ChildNodes[iCurrentNode].ChildNodes[0].InnerText = p_sValue;
        blnApplyChanges = true;
    }

    if (blnApplyChanges)
    {
        xmlDoc.Save(p_sPath);
        FixBlankXMLValues(p_sPath);
    }
}

我添加了手表来查看所有不同节点的值,还没有遇到空值,所以我想知道这是否与我构建XML的方式有关。最初,当我重新绑定ListView时,我原本以为我一直在清除传入的值,但结果并非如此。

Here是XML的示例结构,包含一些编辑信息。

1 个答案:

答案 0 :(得分:0)

<setting name="RequiredDocuments" serializeAs="String">     
</setting>

没有要更新的childNode'Value'。

xmlDoc.ChildNodes [1] [“applicationSettings”]。ChildNodes [0] = <Project.Properties.Settings>

xmlDoc.ChildNodes [1] [“applicationSettings”]。ChildNodes [0] .ChildNodes [iCurrentNode] = <setting name="RequiredDocuments" serializeAs="String">

xmlDoc.ChildNodes [1] [ “的applicationSettings”]。的childNodes [0] .ChildNodes [iCurrentNode] .ChildNodes [0] 是NULL。