你好,所以我有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
问题,但它没有解决我的问题
答案 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
。