2012-07-26 3 views
2

WPF를 사용하여이 메서드에 액세스하고 있습니다. 외부 메서드에서 객체에 액세스 할 때 Dispatcher를 사용해야한다는 것을 알고 있습니다. 또는 "노드"는 로컬 변수이며 다음을 제공합니다.WPF : 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.

개체 참조가 개체의 인스턴스로 설정되지 않았습니다.

왜? 내가 정직 해요 경우 내가 node.SelectSingleNodeInnerXml에 시도 된 호출이 예외를 트리거되어 않는 null 반환 의심

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'되어 근무

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

를? 'valery'도 마찬가지다. – JMK

+0

XmlDocument xmlNews = new XmlDocument(); SpeechSynthesizer valery = 새로운 SpeechSynthesizer(); –

+3

'valery'는 null 일 수 있고,'xmlNews'는 null 일 수 있고'node.SelectSingleNode'의 결과는 null 일 수 있습니다. 솔직히 말하면 나는 마지막 것을 의심한다. 즉, InnerXml에 대한 호출 시도가 예외를 트리거하고 있음을 의미한다. –

답변

2

:

여기에 코드입니다.

시도하고 다음과 같이 변경 :

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) 문자열을 할 수없는 경우를 Speak에서뿐만 아니라 InnerXml에 체크하십시오.

처음에는 XPath가 의심스럽지 않습니다. XPath가 아무 것도 찾지 못하는 경우 해당 메서드가 null 항목 대신 빈 컬렉션을 반환하기 때문에 XPath가 의심스럽지 않습니다.

+0

당신이 옳았어요! node.SelectSingleNode는 null을 반환합니다. foreach (xmlNews.SelectNodes ("/ rss/channel/item/title")의 XmlNode 노드)로 코드를 변경하고 원하는대로 작동합니다! 감사! –

0

슬래시를 제거하고 다시 시도하십시오. 아래를 참조하십시오 :이 나를

관련 문제