XmlDocument XML编码转换的示例代码分享
16lz
2021-01-22
最近做一个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 + "<br><a href = "43 + xml.SelectSingleNode("//image/link").InnerText44 + ">"45 + "<img src="46 + xml.SelectSingleNode("//image/url").InnerText47 + " border = no></a><br>"48 + xml.SelectSingleNode ("/rss/channel/description").InnerText49 + "<br>"50 + xml.SelectSingleNode("/rss/channel/link").InnerText;51 }52 catch53 {54 try55 {56 titleLabel.Text = xml.SelectSingleNode ("/rss/channel/title").InnerText57 + "<br>"58 + xml.SelectSingleNode("/rss/channel/description").InnerText59 + "<br>"60 + xml.SelectSingleNode ("/rss/channel/link").InnerText;61 }62 catch63 {64 //假如没有频道进行说明的情况下65 titleLabel.Text = xml.SelectSingleNode ("/rss/channel/title").InnerText66 + "<br>"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流转化编码 ,一样的处理。
其核心就是使用流转换编码。
更多相关文章
- xml文件正确性验证类的示例代码分析
- 详解xmlhttp组件获取远程文件并筛选出目标数据
- xml文件如何编辑的详情介绍
- 教你如何打开xml文件的详解
- XML文件要有根标签(错误)的代码解决分享
- 读取XML文件时报“前言中不允许有内容”错误处理办法详解
- 解析XML文件的几种方式对比的详细介绍
- XML文件使用SAX方法读取的示例代码
- XML文件使用DOM方法读取的示例代码