2

我正在使用 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);
}
4

2 回答 2

2

老实说,我怀疑node.SelectSingleNode返回的是 null,这意味着尝试调用 toInnerXml正在触发异常。

尝试进行以下更改:

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 项。

于 2012-07-26T12:02:22.540 回答
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);
}

这对我有用

于 2012-07-26T12:10:02.383 回答