2012-07-26 73 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); 
} 

這爲我工作

相關問題