保存XDocument后,SelectSingleNode返回null

时间:2015-11-26 13:30:39

标签: c# xml

你好,所以我有GetterSetter.cs代码

public Uri ShowImdb { get; set; }

它从IMDB链接获取显示名称用户键入的信息(例如权力游戏,它给权力游戏imdb链接到该ShowImdb)然后我将该信息写入XML文件以便保存读取使用此代码的目的,

GetterSetter i = new GetterSetter();
XmlNode xImdb = xDoc.CreateElement("ShowImdb");
xImdb.InnerText = i.ShowImdb.ToString();

我想在用户使用此代码打开程序时阅读

private ObservableCollection<GetterSetter> _getterSetter = new ObservableCollection<GetterSetter>();

public ObservableCollection<GetterSetter> showList
    {
        get { return this._getterSetter; }
    }

XmlNode xNode = xDoc.SelectSingleNode("Shows"); 
foreach (GetterSetter i in showList)
{
    i.ShowImdb = xNode.SelectSingleNode("ShowImdb").InnerText;
}

它不起作用,我也试过了,

xNode.SelectSingleNode("ShowImdb").InnerText = i.ShowImdb.ToString();

这次它给了我错误,

  

ShowTrack.exe中出现未处理的“System.NullReferenceException”类型异常

     

附加信息:未将对象引用设置为对象的实例。

我也提到NullReferenceException问题,但它没有解决我的问题

1 个答案:

答案 0 :(得分:1)

首先,您的文档中不存在导致xNode.SelectSingleNode("ShowImdb")的{​​{1}}。

如果要保留对 xDucument 的更改,则必须在关闭应用程序之前保存它(发布 XDocument 对象)。使用XDocument.Save(string)

<小时/> 的更新

还要记住NullReferenceException作为参数使用XPath而不是元素名称,并且适用于当前上下文。

  

选择与XPath表达式匹配的第一个XmlNode。使用提供的XmlNamespaceManager解析XPath表达式中找到的任何前缀。

您正在使用确切名称SelectSingleNode(XPath)模式,该模式将按指定名称返回当前上下文中的单个元素

现在,在添加元素时,您可以在XPath级别执行此操作,然后尝试从基础 Show 元素中读取特定元素。所以上下文不同,因为没有 ShowImdb

简而言之,您在根级别创建了 ShowImdb ,然后尝试从其中一个嵌套的 Show - 节点中读取它,但它没有&#39那里存在。结果 - XDocument