XmlDocument XML编码转换的示例代码分享

最近做一个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             + "XmlDocument XML编码转换的示例代码分享
"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

(0)
上一篇 2025年3月3日 02:23:19
下一篇 2025年2月19日 22:54:14

AD推荐 黄金广告位招租... 更多推荐

发表回复

登录后才能评论