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

互联网 17-3-24
最近做一个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 }  6  7 private DataTable ReturnReadResult( string rssUrl )  8    {  9      //构在DataTable表格  10      DataTable dt = CreateDataTable();  11       DataRow dr;  12  13      try   14      {  15        XmlDocument xml = new XmlDocument();  16  17        //正常加载完全合格的RSS 2.0文件  18         try  19        {  20           xml.LoadXml( rssUrl );  21        }  22         catch  23        {  24          //下面的措施 针对一些特别的RSS 2.0文件,比如下面的一个站点:  25           //site :http://www.csdn.net/rss/rssfeed.aspx? rssid=1&bigclassid=14  26          //按照常规是无法正 常加载的。需要进一步处理。比如一些.NET暂时不支持的编码,目前可以读取所 知的RSS 2.0  27           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" ));  32  33          xml.LoadXml( sr.ReadToEnd( ).Trim( ) );  34          sr.Close();  35          srp.Close();  36        }  37  38        //读取总标题信息,可以判断是否有图片展示  39        try  40        {  41           titleLabel.Text = xml.SelectSingleNode ("/rss/channel/title").InnerText  42             + "<br><a href = "  43             + xml.SelectSingleNode("//image/link").InnerText  44             + ">"  45             + "<img src="  46            + xml.SelectSingleNode("//image/url").InnerText  47             + " border = no></a><br>"  48            + xml.SelectSingleNode ("/rss/channel/description").InnerText  49             + "<br>"  50            +  xml.SelectSingleNode("/rss/channel/link").InnerText;  51         }  52        catch  53         {  54          try  55          {  56             titleLabel.Text = xml.SelectSingleNode ("/rss/channel/title").InnerText  57               + "<br>"  58              + xml.SelectSingleNode("/rss/channel/description").InnerText  59              + "<br>"  60               + xml.SelectSingleNode ("/rss/channel/link").InnerText;  61           }  62          catch  63          {  64            //假如没有频道进行说明的情况下  65             titleLabel.Text = xml.SelectSingleNode ("/rss/channel/title").InnerText  66               + "<br>"  67              + xml.SelectSingleNode("/rss/channel/link").InnerText;  68           }  69        }  70  71         XmlNodeList nodes = xml.SelectNodes("//item");  72  73        foreach( XmlNode item in nodes )  74         {  75          dr = dt.NewRow();  76           foreach( XmlNode child in item.ChildNodes )  77           {  78  79            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    }  117  118//手动创立一个DataTable  119    private DataTable CreateDataTable()  120    {  121      DataTable dt = new DataTable();  122      DataColumn dc;  123  124       System.Type type;  125      type = System.Type.GetType("System.String");  126  127       dc = new DataColumn( "title",type );  128       dt.Columns.Add( dc );  129  130      dc = new DataColumn( "link", type );  131       dt.Columns.Add( dc );  132  133      dc = new DataColumn( "author", type );  134      dt.Columns.Add( dc );  135  136      dc = new DataColumn( "guid", type );  137      dc.DefaultValue = "";  138       dt.Columns.Add( dc );  139  140      dc = new DataColumn( "category", type );  141       dc.AllowDBNull = true;  142      dt.Columns.Add( dc );  143  144      dc = new DataColumn( "pubDate", type );  145      dt.Columns.Add( dc );  146  147       dc = new DataColumn( "description", type );  148       dc.AllowDBNull = true;  149      dt.Columns.Add( dc );  150  151      dc = new DataColumn( "comments", type );  152      dc.AllowDBNull = true;  153      dt.Columns.Add( dc );  154  155       return dt;  156    }

这样处理后,可以读取大 部分的RSS 2.0连接。

至于处理本地的文件使用StreamReader流转化编码 ,一样的处理。

其核心就是使用流转换编码。

以上就是XmlDocument XML编码转换的示例代码分享的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:XML结构与语法入门的具体分享

相关资讯