C#.Net XML - 未将对象引用设置为对象的实例 - 将值写入XML

时间:2015-03-19 17:10:21

标签: c# .net xml exception

我正在尝试将内容写入xml文件。我有一个功能:

bool WriteValueTOXML(string pstrValueToRead, string pstrValueToWrite)
    {
        try
        {
            XmlTextReader reader = new XmlTextReader("config.ini");
            XmlDocument doc = new XmlDocument();
            doc.Load(reader);
            reader.Close();
            XmlNode oldNode;
            XmlElement root = doc.DocumentElement;
            oldNode = root.SelectSingleNode(@"/settings/" + pstrValueToRead);
            oldNode.InnerText = pstrValueToWrite;
            doc.Save("config.ini");
            return true;
        }
        catch (NullReferenceException e)
        {
            MessageBox.Show(e.Message);
            return false;
        }
    }

当我尝试在oldNode中设置InnerText时(oldNode.InnerText = pstrValueToWrite;),抛出NullReferenceException,并显示消息“对象引用未设置为对象的实例”。

我想写的文件在这里:config.ini

2 个答案:

答案 0 :(得分:2)

oldNode = root.SelectSingleNode(@"/settings/" + pstrValueToRead);必须返回null。在该行代码之后放置一个断点并检查是否是这种情况。如果是这样,请调整xpath,使其返回实际节点。

答案 1 :(得分:0)

此示例适用于以下假设:

XmlDocument doc = new XmlDocument();
using(XmlTextReader reader = new XmlTextReader(@"C:\Temp\config.ini"))
{
   doc.Load(reader);
}
XmlElement root = doc.DocumentElement;
XmlNode oldNode = root.SelectSingleNode(@"/settings/database");
oldNode.InnerText = "Blah Blah2";
doc.Save(@"C:\Temp\config.ini.out");

这假设您要将数据库标记的内部文本your path to database更新为其他内容。