如何实现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 }
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编码的转换问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。