计算机语言XML,如何实现XmlDocument XML编码的转换

如何实现XmlDocument XML编码的转换

发布时间:2020-07-13 10:50:08

来源:亿速云

阅读:119

作者:Leah

如何实现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             + "

44             + ">"

45             + "p><p>46%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80%E3%80%80+%20xml.SelectSingleNode(

47             + " border = no>


"

48            + xml.SelectSingleNode ("/rss/channel/description").InnerText

49             + "
"

50            +  xml.SelectSingleNode("/rss/channel/link").InnerText;

51         }

52        catch

53         {

54          try

55          {

56             titleLabel.Text = xml.SelectSingleNode ("/rss/channel/title").InnerText

57               + "
"

58              + xml.SelectSingleNode("/rss/channel/description").InnerText

59              + "
"

60               + xml.SelectSingleNode ("/rss/channel/link").InnerText;

61           }

62          catch

63          {

64            //假如没有频道进行说明的情况下

65             titleLabel.Text = xml.SelectSingleNode ("/rss/channel/title").InnerText

66               + "
"

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编码的转换问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值