1

因此,我正在使用 C# 开发语音识别程序,并且在尝试将 YAHOO News API 实现到程序中时,我没有得到任何响应。

我不会复制/粘贴我的整个代码,因为它会很长,所以这里是主要部分。

private void GetNews()
{
    string query = String.Format("http://news.yahoo.com/rss/");
    XmlDocument wData = new XmlDocument();
    wData.Load(query);

    XmlNamespaceManager manager = new XmlNamespaceManager(wData.NameTable);
    manager.AddNamespace("media", "http://search.yahoo.com/mrss/");

    XmlNode channel = wData.SelectSingleNode("rss").SelectSingleNode("channel");
    XmlNodeList nodes = wData.SelectNodes("rss/channel/item/description", manager);

    FirstStory = channel.SelectSingleNode("item").SelectSingleNode("title", manager).Attributes["alt"].Value;

}

我相信我在这里做错了什么:

XmlNode channel = wData.SelectSingleNode("rss").SelectSingleNode("channel");
XmlNodeList nodes = wData.SelectNodes("rss/channel/item/description", manager);

FirstStory = channel.SelectSingleNode("item").SelectSingleNode("title", manager).Attributes["alt"].Value;

这是完整的 XML 文档: http: //news.yahoo.com/rss/

如果需要更多信息,请告诉我。

4

3 回答 3

1

嗯,我已经实现了自己的代码来从雅虎获取新闻,我阅读了所有新闻标题(位于 rss/channel/item/title )和短篇故事(位于 rss/channel/item/description )。

短篇故事是新闻的问题,这就是我们需要在一个字符串中获取描述节点的所有内部文本,然后像 XML 一样解析它的时候。文本代码采用这种格式,短篇小说就在后面</p>

<p><a><img /></a></p>"Short Story"<br clear="all"/>

我们需要修改它,因为我们有许多 xml 根(p 和 br)并且我们添加了一个额外的根<me>

string ShStory=null;
string Title = null;

//Creating a XML Document
XmlDocument doc = new XmlDocument();  

//Loading rss on it
doc.Load("http://news.yahoo.com/rss/");

//Looping every item in the XML
foreach (XmlNode node in doc.SelectNodes("rss/channel/item"))
{
    //Reading Title which is simple
    Title = node.SelectSingleNode("title").InnerText;

    //Putting all description text in string ndd
    string ndd =  node.SelectSingleNode("description").InnerText;

    XmlDocument xm = new XmlDocument();

    //Loading modified string as XML in xm with the root <me>
    xm.LoadXml("<me>"+ndd+"</me>");

    //Selecting node <p> which has the text
    XmlNode nodds = xm.SelectSingleNode("/me/p");

   //Putting inner text in the string ShStory
    ShStory= nodds.InnerText;

   //Showing the message box with the loaded data
    MessageBox.Show(Title+ "    "+ShStory); 
}

如果代码适合您,请选择我作为正确答案或投票给我。如果有什么问题可以问我。干杯

于 2013-08-14T00:52:59.210 回答
0

您可能会将命名空间管理器传递给这些属性,但我不能 100% 确定。那些绝对不在那个.../mrss/命名空间中,所以我猜这是你的问题。

我会尝试不传递命名空间(如果可能)或使用该GetElementsByTagName方法来避免命名空间问题。

于 2013-08-01T18:54:29.637 回答
0

标记包含文本而不是 Xml。这是显示文本新闻的示例:

foreach (XmlElement node in nodes)
{
     Console.WriteLine(Regex.Match(node.InnerXml, 
                           "(?<=(/a&gt;)).+(?=(&lt;/p))"));
     Console.WriteLine();
}
于 2013-08-01T20:03:58.433 回答