2012-07-26 103 views
2

我正在使用WPF访问此方法。我知道当从外部方法访问对象时,我应该使用Dispatcher。或“节点”是一个局部变量,它给我:WPF:未将对象引用设置为对象的实例

对象引用不设置到对象的实例。

为什么?

下面的代码:

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); 
} 
+0

是'xmlNews'分配到什么? 'valery'同样适用于 – JMK 2012-07-26 11:58:45

+0

XmlDocument xmlNews = new XmlDocument(); SpeechSynthesizer valery = new SpeechSynthesizer(); – 2012-07-26 11:59:51

+3

'valery'可以为null,'xmlNews'可以为null,'node.SelectSingleNode'的结果可以为null。如果我说实话,我怀疑是最后一个,这意味着尝试调用'InnerXml'会触发异常。 – 2012-07-26 12:00:02

回答

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找不到任何内容,这些方法将返回空集合而不是空项目。

+0

你是对的! node.SelectSingleNode返回null我改变了foreach的代码(xmlNews.SelectNodes(“/ rss/channel/item/title”)中的XmlNode节点),它可以像我想要的那样工作!谢谢! – 2012-07-26 12:09:06

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); 
} 

这为我工作

相关问题