您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2025/12/3 5:16:16发布39次查看
最近做一个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表格 10datatable dt = createdatatable(); 11 datarow dr; 12 13try  14{ 15xmldocument 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 ); 29system.net.webresponse srp = wr.getresponse (); 30//加入了把原先编码都转化成了2312gb形式。 31streamreader sr = new streamreader( srp.getresponsestream() ,system.text.encoding.getencoding( "gb2312" )); 32 33xml.loadxml( sr.readtoend( ).trim( ) ); 34sr.close(); 35srp.close(); 36} 37 38//读取总标题信息,可以判断是否有图片展示 39try 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 } 52catch 53 { 54try 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   } 62catch 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 73foreach( xmlnode item in nodes ) 74   { 75dr = dt.newrow(); 76   foreach( xmlnode child in item.childnodes ) 77   { 78 79switch( child.name ) 80{ 81   case "title": 82   dr[ "title" ] = child.innertext; 83   break; 84case "link": 85dr[ "link" ] = child.innertext; 86   break; 87case "author": 88dr[ "author" ] = child.innertext; 89 break; 90case "guid": 91dr[ "guid" ] = child.innertext; 92   break; 93case "category": 94dr[ "category" ] = child.innertext; 95   break; 96case "pubdate": 97dr[ "pubdate" ] = child.innertext; 98   break; 99case "description": 100dr[ "description" ] = child.innertext; 101   break; 102case "comments": 103dr[ "comments" ] = child.innertext; 104 break; 105} 106   } 107dt.rows.add( dr ); 108 } 109return dt; 110} 111catch ( exception ex ) 112{ 113response.write( ex.tostring( ) ); 114 return null; 115} 116} 117 118//手动创立一个datatable 119private datatable createdatatable() 120{ 121datatable dt = new datatable(); 122datacolumn dc; 123 124   system.type type; 125type = system.type.gettype("system.string"); 126 127   dc = new datacolumn( "title",type ); 128   dt.columns.add( dc ); 129 130dc = new datacolumn( "link", type ); 131 dt.columns.add( dc ); 132 133dc = new datacolumn( "author", type ); 134dt.columns.add( dc ); 135 136dc = new datacolumn( "guid", type ); 137dc.defaultvalue = ""; 138   dt.columns.add( dc ); 139 140dc = new datacolumn( "category", type ); 141 dc.allowdbnull = true; 142dt.columns.add( dc ); 143 144dc = new datacolumn( "pubdate", type ); 145dt.columns.add( dc ); 146 147 dc = new datacolumn( "description", type ); 148 dc.allowdbnull = true; 149dt.columns.add( dc ); 150 151dc = new datacolumn( "comments", type ); 152dc.allowdbnull = true; 153dt.columns.add( dc ); 154 155   return dt; 156}
这样处理后,可以读取大 部分的rss 2.0连接。
至于处理本地的文件使用streamreader流转化编码 ,一样的处理。
其核心就是使用流转换编码。
以上就是xmldocument xml编码转换的示例代码分享的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product