WPF:对象引用未设置为对象的实例

时间:2012-07-26 11:56:12

标签: c# wpf xmlnode

我正在使用WPF访问此方法。我知道当从外部方法访问对象时,我应该使用Dispatcher。或者“节点”是一个局部变量,它给了我:

  

对象引用未设置为对象的实例。

为什么?

以下是代码:

SpeechSynthesizer valery = new SpeechSynthesizer();
XmlDocument xmlNews = new XmlDocument();
xmlNews.Load(string.Format("http://news.google.com/news?pz=1&cf=all&ned=us&hl=en&topic=tc&output=rss"));
foreach (XmlNode node in xmlNews.SelectNodes("/rss/channel/item"))
{
    valery.Speak(node.SelectSingleNode("/title").InnerXml);
}

2 个答案:

答案 0 :(得分:2)

如果我是诚实的,我怀疑node.SelectSingleNode返回null,这意味着尝试调用InnerXml会触发异常。

尝试进行以下更改:

foreach (XmlNode node in xmlNews.SelectNodes("/rss/channel/item"))
{
    var titleNode = node.SelectSingleNode("/title");

    if (titleNode != null && !string.IsNullOrEmpty(titleNode.InnerXml))
        valery.Speak(titleNode.InnerXml);
}

我也会检查InnerXml,以防Speak无法取空字符串。

我最初并不怀疑XPath,因为如果XPath没有找到任何内容,那些方法将返回空集合而不是null项。

答案 1 :(得分:0)

取出正斜杠,然后再试一次。见下文:

SpeechSynthesizer valery = new SpeechSynthesizer();
XmlDocument xmlNews = new XmlDocument();
xmlNews.Load(string.Format("http://news.google.com/news?pz=1&cf=all&ned=us&hl=en&topic=tc&output=rss"));
foreach (XmlNode node in xmlNews.SelectNodes("/rss/channel/item"))
{
    valery.Speak(node.SelectSingleNode("title").InnerXml);
}

这对我有用