C# 解析XML时出现问题?

C# 解析XML时出现问题?,c#,xml,rss,C#,Xml,Rss,我正在用C#制作一个简单的RSS阅读器应用程序。这是我第一次使用XML,需要一些帮助来解析各种rss提要中使用的不同样式 例如 以下是我期望的提要类型,并获得正确的结果: <item> <title>Cometh the hour, cometh the man</title> <link>http://www.espnstar.com/rss-feed/detail/item612327</link>

我正在用C#制作一个简单的RSS阅读器应用程序。这是我第一次使用XML,需要一些帮助来解析各种rss提要中使用的不同样式

例如

以下是我期望的提要类型,并获得正确的结果:

<item>
      <title>Cometh the hour, cometh the man</title>
      <link>http://www.espnstar.com/rss-feed/detail/item612327</link>
      <description>Real Madrid have finally won their first trophy since 2008. Unsurprisingly, it has coincided with the arrival of one man.</description>
      <pubDate>Thu, 21 Apr 2011 04:11:42 GMT</pubDate>
    </item>

时间到了,人来了
http://www.espnstar.com/rss-feed/detail/item612327
皇家马德里终于赢得了自2008年以来的第一座奖杯。不出所料,它正好与一个人的到来相吻合。
2011年4月21日星期四04:11:42 GMT
但是像这样的提要:

    <item><title>NBA: San Antonio Spurs rally to level up with Memphis Grizzlies</title>
<link>http://timesofindia.feedsportal.com/c/33039/f/533921/s/1455e7bf/l/0Ltimesofindia0Bindiatimes0N0Csports0Cnba0Ctop0Estories0CNBA0ESan0EAntonio0ESpurs0Erally0Eto0Elevel0Eup0Ewith0EMemphis0EGrizzlies0Carticleshow0C80A443210Bcms/story01.htm</link>
<description>The San Antonio Spurs, trailed by three points at half-time, rallied to level their first round playoff series with the Memphis Grizzlies at 1-1 with a 93-87 victory.&lt;img width='1' height='1' src='http://timesofindia.feedsportal.com/c/33039/f/533921/s/1455e7bf/mf.gif' border='0'/&gt;&lt;div class='mf-viral'&gt;&lt;table border='0'&gt;&lt;tr&gt;&lt;td valign='middle'&gt;&lt;a href="http://res.feedsportal.com/viral/sendemail2.html?title=NBA%3A+San+Antonio+Spurs+rally+to+level+up+with+Memphis+Grizzlies&amp;link=http%3A%2F%2Ftimesofindia.indiatimes.com%2Fsports%2Fnba%2Ftop-stories%2FNBA-San-Antonio-Spurs-rally-to-level-up-with-Memphis-Grizzlies%2Farticleshow%2F8044321.cms" target="_blank"&gt;&lt;img src="http://res3.feedsportal.com/images/emailthis2.gif" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td valign='middle'&gt;&lt;a href="http://res.feedsportal.com/viral/bookmark.cfm?title=NBA%3A+San+Antonio+Spurs+rally+to+level+up+with+Memphis+Grizzlies&amp;link=http%3A%2F%2Ftimesofindia.indiatimes.com%2Fsports%2Fnba%2Ftop-stories%2FNBA-San-Antonio-Spurs-rally-to-level-up-with-Memphis-Grizzlies%2Farticleshow%2F8044321.cms" target="_blank"&gt;&lt;img src="http://res3.feedsportal.com/images/bookmark.gif" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href="http://da.feedsportal.com/r/100752217265/u/242/f/533921/c/33039/s/1455e7bf/a2.htm"&gt;&lt;img src="http://da.feedsportal.com/r/100752217265/u/242/f/533921/c/33039/s/1455e7bf/a2.img" border="0"/&gt;&lt;/a&gt;</description>
<pubDate>Thu, 21 Apr 2011 04:33:44 GMT</pubDate>
</item>
<item>
<title><![CDATA[Japan declares no-go zone around nuclear plant ]]></title>

<author><![CDATA[AP]]></author>
<category><![CDATA[International]]></category>
<link>http://www.thehindu.com/news/international/article1714401.ece</link>
<description><![CDATA[
Japan declared a 20 km evacuation zone around its tsunami-crippled nuclear power plant a no-go zone on Thursday, urging residents to abide by the order for the sake of their own safety. Chi...
]]>
</description>
<pubDate><![CDATA[Thu, 21 Apr 2011 08:15:48 +0530]]></pubDate>
</item>
<item>
NBA:圣安东尼奥马刺队与孟菲斯灰熊队齐头并进
http://timesofindia.feedsportal.com/c/33039/f/533921/s/1455e7bf/l/0Ltimesofindia0Bindiatimes0N0Csports0Cnba0Ctop0Estories0CNBA0ESan0EAntonio0ESpurs0Erally0Eto0Elevel0Eup0Ewith0EMemphis0EGrizzlies0Carticleshow0C80A443210Bcms/story01.htm
圣安东尼奥马刺队在半场时落后三分,在季后赛第一轮比赛中以93-87的比分与孟菲斯灰熊队以1-1的比分扳平比分。img width='1'height='1'src='1'http://timesofindia.feedsportal.com/c/33039/f/533921/s/1455e7bf/mf.gif'border='0'/div class='mf-viral'table border='0'trtd valign='middle'a href="http://res.feedsportal.com/viral/sendemail2.html?title=NBA%3A+圣安东尼奥+马刺+拉力赛+升级+孟菲斯+灰熊;link=http%3A%2F%2Ftimesofindia.indatimes.com%2Fsports%2Fnba%2Ftop stories%2Fnba圣安东尼奥马刺拉力赛与孟菲斯灰熊队升级%2Farticleshow%2F8044321.cms“target=“\u blank”img src=”http://res3.feedsportal.com/images/emailthis2.gif“border=“0”//a/tdtd valign='middle'a href=”http://res.feedsportal.com/viral/bookmark.cfm?title=NBA%3A+圣安东尼奥+马刺+拉力赛+升级+孟菲斯+灰熊;link=http%3A%2F%2Ftimesofindia.indatimes.com%2Fsports%2Fnba%2Ftop stories%2Fnba圣安东尼奥马刺拉力赛与孟菲斯灰熊队升级%2Farticleshow%2F8044321.cms“target=“\u blank”img src=”http://res3.feedsportal.com/images/bookmark.gif“border=“0”//a/td/tr/table/divbr/br/a href=”http://da.feedsportal.com/r/100752217265/u/242/f/533921/c/33039/s/1455e7bf/a2.htm“img src=”http://da.feedsportal.com/r/100752217265/u/242/f/533921/c/33039/s/1455e7bf/a2.img“border=“0”/a
2011年4月21日星期四04:33:44 GMT
如何从description节点提取主描述文本,而不是像hrefs这样的其他内容

如何在订阅源中处理cdata,如:

    <item><title>NBA: San Antonio Spurs rally to level up with Memphis Grizzlies</title>
<link>http://timesofindia.feedsportal.com/c/33039/f/533921/s/1455e7bf/l/0Ltimesofindia0Bindiatimes0N0Csports0Cnba0Ctop0Estories0CNBA0ESan0EAntonio0ESpurs0Erally0Eto0Elevel0Eup0Ewith0EMemphis0EGrizzlies0Carticleshow0C80A443210Bcms/story01.htm</link>
<description>The San Antonio Spurs, trailed by three points at half-time, rallied to level their first round playoff series with the Memphis Grizzlies at 1-1 with a 93-87 victory.&lt;img width='1' height='1' src='http://timesofindia.feedsportal.com/c/33039/f/533921/s/1455e7bf/mf.gif' border='0'/&gt;&lt;div class='mf-viral'&gt;&lt;table border='0'&gt;&lt;tr&gt;&lt;td valign='middle'&gt;&lt;a href="http://res.feedsportal.com/viral/sendemail2.html?title=NBA%3A+San+Antonio+Spurs+rally+to+level+up+with+Memphis+Grizzlies&amp;link=http%3A%2F%2Ftimesofindia.indiatimes.com%2Fsports%2Fnba%2Ftop-stories%2FNBA-San-Antonio-Spurs-rally-to-level-up-with-Memphis-Grizzlies%2Farticleshow%2F8044321.cms" target="_blank"&gt;&lt;img src="http://res3.feedsportal.com/images/emailthis2.gif" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td valign='middle'&gt;&lt;a href="http://res.feedsportal.com/viral/bookmark.cfm?title=NBA%3A+San+Antonio+Spurs+rally+to+level+up+with+Memphis+Grizzlies&amp;link=http%3A%2F%2Ftimesofindia.indiatimes.com%2Fsports%2Fnba%2Ftop-stories%2FNBA-San-Antonio-Spurs-rally-to-level-up-with-Memphis-Grizzlies%2Farticleshow%2F8044321.cms" target="_blank"&gt;&lt;img src="http://res3.feedsportal.com/images/bookmark.gif" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href="http://da.feedsportal.com/r/100752217265/u/242/f/533921/c/33039/s/1455e7bf/a2.htm"&gt;&lt;img src="http://da.feedsportal.com/r/100752217265/u/242/f/533921/c/33039/s/1455e7bf/a2.img" border="0"/&gt;&lt;/a&gt;</description>
<pubDate>Thu, 21 Apr 2011 04:33:44 GMT</pubDate>
</item>
<item>
<title><![CDATA[Japan declares no-go zone around nuclear plant ]]></title>

<author><![CDATA[AP]]></author>
<category><![CDATA[International]]></category>
<link>http://www.thehindu.com/news/international/article1714401.ece</link>
<description><![CDATA[
Japan declared a 20 km evacuation zone around its tsunami-crippled nuclear power plant a no-go zone on Thursday, urging residents to abide by the order for the sake of their own safety. Chi...
]]>
</description>
<pubDate><![CDATA[Thu, 21 Apr 2011 08:15:48 +0530]]></pubDate>
</item>
<item>

http://www.thehindu.com/news/international/article1714401.ece
看看这个

看看这个


好吧,你可以用正则表达式去掉你不需要的所有东西

XElement d = XElement.Parse(feed);  // load the feed in an XElement

// get the title, link and description
string title = d.Elements("title").FirstOrDefault().Value;
string link = d.Elements("link").FirstOrDefault().Value;
string description = d.Elements("description").FirstOrDefault().Value;

// remove everything that's between '<>'
Regex r =  new Regex(@"<.*>");
description = r.Replace(description, "");
XElement d=XElement.Parse(feed);//在XElement中加载提要
//获取标题、链接和描述
字符串title=d.Elements(“title”).FirstOrDefault()值;
字符串link=d.Elements(“link”).FirstOrDefault()值;
字符串描述=d.Elements(“描述”).FirstOrDefault()值;
//删除介于“”之间的所有内容
正则表达式r=新正则表达式(@“”);
description=r.替换(description,“”);

第二轮比赛的结果是:圣安东尼奥马刺队在上半场落后三分,以93-87的比分与孟菲斯灰熊队以1-1的比分扳平季后赛首轮比赛。第一轮比赛结果不变,第三轮比赛将自动忽略所有CDATA内容。

好吧,你可以使用一个正则表达式,用来处理所有你不需要的东西

XElement d = XElement.Parse(feed);  // load the feed in an XElement

// get the title, link and description
string title = d.Elements("title").FirstOrDefault().Value;
string link = d.Elements("link").FirstOrDefault().Value;
string description = d.Elements("description").FirstOrDefault().Value;

// remove everything that's between '<>'
Regex r =  new Regex(@"<.*>");
description = r.Replace(description, "");
XElement d=XElement.Parse(feed);//在XElement中加载提要
//获取标题、链接和描述
字符串title=d.Elements(“title”).FirstOrDefault()值;
字符串link=d.Elements(“link”).FirstOrDefault()值;
字符串描述=d.Elements(“描述”).FirstOrDefault()值;
//删除介于“”之间的所有内容
正则表达式r=新正则表达式(@“”);
description=r.替换(description,“”);

对于第二轮比赛,结果将是:圣安东尼奥马刺队在半场时落后三分,以93-87的比分与孟菲斯灰熊队以1-1的比分扳平季后赛首轮系列赛。第一轮比赛结果将保持不变,第三轮比赛将自动忽略所有CDATA内容。

不太确定,但我不确定如果编码的HTML是收到的CDATA描述的一部分,则上述正则表达式将不起作用。您可能需要先使用描述的
HtmlDecode
,然后使用正则表达式。不太确定,但我没有弄错,如果编码的HTML是收到的CDATA描述的一部分,则上述正则表达式将不起作用。您可能会bly需要首先使用描述的
HtmlDecode
,然后使用正则表达式。