2

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

2 に答える 2

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

null文字列を取得できないInnerXml場合に備えて、チェックもオンにします。Speak

XPathが何も見つからない場合、これらのメソッドはnullアイテムではなく空のコレクションを返すため、最初はXPathを疑っていません。

于 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 に答える