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编码转换的示例代码分享的详细内容。
