最近做一个rss在线聚合器,大部分rss 2.0编码的xml编码.net编译器都可以 正确读取,可是一些比如gbk编码,我们的.net就读取不了,如果把那个xml的编 码手动改变成“gb2312”或者其它编码,也是读取不了。不过编码改 变不改变,ie都是可以正确查看的。下面怎么办,确实难住我了。改变编码怎么 样?我的rss在线聚合器要读取的rss 2.0文件不是下载到本地的文件,而是在线 阅读。那好,得到连接后,使用流可以很好的得到正确编码的xml流。下面见代码 啦:
1 private void Page_Load(object sender, System.EventArgs e)2 {3 rssRepeater.DataSource = ReturnReadResult( Request[ "url" ] );4 rssRepeater.DataBind( );5 }67 private DataTable ReturnReadResult( string rssUrl )8 {9 //构在DataTable表格10 DataTable dt = CreateDataTable();11 DataRow dr;1213 try 14 {15 XmlDocument xml = new XmlDocument();1617 //正常加载完全合格的RSS 2.0文件18 try19 {20 xml.LoadXml( rssUrl );21 }22 catch23 {24 //下面的措施 针对一些特别的RSS 2.0文件,比如下面的一个站点:25 //site :http://www.csdn.net/rss/rssfeed.aspx? rssid=1&bigclassid=1426 //按照常规是无法正 常加载的。需要进一步处理。比如一些.NET暂时不支持的编码,目前可以读取所 知的RSS 2.027 rssUrl = "http://soft.yesky.com/index.xml";28 System.Net.WebRequest wr = System.Net.WebRequest.Create( rssUrl );29 System.Net.WebResponse srp = wr.GetResponse ();30 //加入了把原先编码都转化成了2312gb形式。 31 StreamReader sr = new StreamReader( srp.GetResponseStream() ,System.Text.Encoding.GetEncoding( "gb2312" ));3233 xml.LoadXml( sr.ReadToEnd( ).Trim( ) );34 sr.Close();35 srp.Close();36 }3738 //读取总标题信息,可以判断是否有图片展示39 try40 {41 titleLabel.Text = xml.SelectSingleNode ("/rss/channel/title").InnerText42 + "
"45 + "
"48 + xml.SelectSingleNode ("/rss/channel/description").InnerText49 + "
"50 + xml.SelectSingleNode("/rss/channel/link").InnerText;51 }52 catch53 {54 try55 {56 titleLabel.Text = xml.SelectSingleNode ("/rss/channel/title").InnerText57 + "
"58 + xml.SelectSingleNode("/rss/channel/description").InnerText59 + "
"60 + xml.SelectSingleNode ("/rss/channel/link").InnerText;61 }62 catch63 {64 //假如没有频道进行说明的情况下65 titleLabel.Text = xml.SelectSingleNode ("/rss/channel/title").InnerText66 + "
"67 + xml.SelectSingleNode("/rss/channel/link").InnerText;68 }69 }7071 XmlNodeList nodes = xml.SelectNodes("//item");7273 foreach( XmlNode item in nodes )74 {75 dr = dt.NewRow();76 foreach( XmlNode child in item.ChildNodes )77 {7879 switch( child.Name )80 {81 case "title":82 dr[ "title" ] = child.InnerText;83 break;84 case "link":85 dr[ "link" ] = child.InnerText;86 break;87 case "author":88 dr[ "author" ] = child.InnerText;89 break;90 case "guid":91 dr[ "guid" ] = child.InnerText;92 break;93 case "category":94 dr[ "category" ] = child.InnerText;95 break;96 case "pubDate":97 dr[ "pubDate" ] = child.InnerText;98 break;99 case "description":100 dr[ "description" ] = child.InnerText;101 break;102 case "comments":103 dr[ "comments" ] = child.InnerText;104 break;105 }106 }107 dt.Rows.Add( dr );108 }109 return dt;110 } 111 catch ( Exception ex )112 {113 Response.Write( ex.ToString( ) );114 return null;115 }116 }117118//手动创立一个DataTable119 private DataTable CreateDataTable()120 {121 DataTable dt = new DataTable();122 DataColumn dc;123124 System.Type type;125 type = System.Type.GetType("System.String");126127 dc = new DataColumn( "title",type );128 dt.Columns.Add( dc );129130 dc = new DataColumn( "link", type );131 dt.Columns.Add( dc );132133 dc = new DataColumn( "author", type );134 dt.Columns.Add( dc );135136 dc = new DataColumn( "guid", type );137 dc.DefaultValue = "";138 dt.Columns.Add( dc );139140 dc = new DataColumn( "category", type );141 dc.AllowDBNull = true;142 dt.Columns.Add( dc );143144 dc = new DataColumn( "pubDate", type );145 dt.Columns.Add( dc );146147 dc = new DataColumn( "description", type );148 dc.AllowDBNull = true;149 dt.Columns.Add( dc );150151 dc = new DataColumn( "comments", type );152 dc.AllowDBNull = true;153 dt.Columns.Add( dc );154155 return dt;156 }
登录后复制
这样处理后,可以读取大 部分的RSS 2.0连接。
至于处理本地的文件使用StreamReader流转化编码 ,一样的处理。
其核心就是使用流转换编码。
以上就是XmlDocument XML编码转换的示例代码分享的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2418617.html