我试图在Repeater(或Gridview)上对Rss提供参数但我无法做到。保持“根级别的数据无效。第1行,位置1”。错误。
XmlDocument rssXmlDoc = new XmlDocument();
// Load the RSS file from the RSS URL
rssXmlDoc.Load("http://feeds.skynews.com/feeds/rss/home.xml");
// Parse the Items in the RSS file
XmlNodeList rssNodes = rssXmlDoc.SelectNodes("rss/channel/item");
StringBuilder rssContent = new StringBuilder();
// Iterate through the items in the RSS file
foreach (XmlNode rssNode in rssNodes)
{
XmlNode rssSubNode = rssNode.SelectSingleNode("title");
string title = rssSubNode != null ? rssSubNode.InnerText : "";
rssSubNode = rssNode.SelectSingleNode("link");
string link = rssSubNode != null ? rssSubNode.InnerText : "";
rssSubNode = rssNode.SelectSingleNode("description");
string description = rssSubNode != null ? rssSubNode.InnerText : "";
// rssContent.Append("<a href='" + link + "'>" + title + "</a><br>" + description);
rssContent.Append(description);
}
// Return the string that contain the RSS items
DataSet ds = new DataSet();
XmlTextReader reader = new XmlTextReader(new StringReader(rssContent.ToString()));
ds.ReadXml(reader);
rssRepeater.DataSource = ds.Tables[2];
rssRepeater.DataBind();
答案 0 :(得分:3)
由于这行代码,您将获得异常:
XmlTextReader reader = new XmlTextReader(new StringReader(rssContent.ToString()));
ds.ReadXml(reader);
这种行为是预料之中的,因为您试图将rssContent
读作不的XML。
这是构建rssContent
后的StringBuilder
:
患者将不得不等待更长时间进行非紧急手术并继续前进 没有一些新药计划今天宣布。欧洲 联盟的谈判方式将塑造其未来的关系 英国将由欧洲理事会主席唐纳德设计 据报道,Tusk.Donald Trump的前国家安全顾问 在俄罗斯涉嫌干涉美国的听证会上作证 选举以换取免疫。伊斯兰国家以平民为对象 联盟空袭的诱饵引起公众的强烈抗议 在摩苏尔继续进攻。苏格兰的第一任部长尼古拉·斯特金 将在一封信中告诉Theresa May他们需要开始 独立公投的安排。兴奋正在建设中 新的预告片之后的最新一期“权力的游戏” 节目的第七季发布.Facebook,谷歌,Twitter和 微软已表示将加大打击恐怖分子的力度 与内政大臣会面后的内容。前电力别动队 明星因杀死他的室友而被判入狱六年 在斯诺登尼亚的一架直升机坠毁中死亡的五个人都是 来自同一个家庭,警方已经确认。威斯敏斯特恐怖杀手 一次调查中,哈立德马苏德死于一枪 被告知。
为了防止出现此问题,您必须构建有效的rssContent
XML,或者您需要完全避免使用XmlTextReader
。
我个人会使用XmlSerializer
来反序列化XML,然后我会将其作为DataSource
传递给转发器。
但是,通过XmlDocument
使用您的方法,这是可行的解决方案。首先,您需要创建哪个集合将是转发器的DataSource
。
public class FeedItem
{
public string Title { get; set; }
public string Link { get; set; }
public string Description { get; set; }
}
然后,当您遍历节点时,需要填充FeedItem
集合并将该集合传递到repeater
。
List<FeedItem> feedItems = new List<FeedItem>();
foreach (XmlNode rssNode in nodes)
{
var feedItem = new FeedItem();
XmlNode rssSubNode = rssNode.SelectSingleNode("title");
feedItem.Title = rssSubNode != null ? rssSubNode.InnerText : "";
rssSubNode = rssNode.SelectSingleNode("link");
feedItem.Link = rssSubNode != null ? rssSubNode.InnerText : "";
rssSubNode = rssNode.SelectSingleNode("description");
feedItem.Description = rssSubNode != null ? rssSubNode.InnerText : "";
// rssContent.Append("<a href='" + link + "'>" + title + "</a><br>" + description);
feedItems.Add(feedItem);
}
rssRepeater.DataSource = feedItems; //Repeater datasource is list of FeedItem objects.
rssRepeater.DataBind();