我正在使用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);
}
答案 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);
}
这对我有用