none
WebRequest和XML问题 RRS feed

  • 问题

  • String url = String.Format(@"http://www.google.com/dictionary?langpair=en%7Czh-CN&q={0}&hl=zh-CN&aq=f",this.textBox1.Text.Trim());
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
    HttpWebResponse res = (HttpWebResponse)req.GetResponse();
    Stream requestStr = res.GetResponseStream();
    StreamReader reader = new StreamReader(requestStr, Encoding.GetEncoding("GB2312")); 
    String str = reader.ReadToEnd();
    XmlDocument xml = new XmlDocument();
    xml.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\" ?> " + str);
    在LoadXml方法的时候会出现"基础连接已经关闭: 连接被意外关闭。"属于WebException.
    不明白为什么我已经把字符串读出来了..还有Web的关联呢
    有时还会报缺少xml头,所以LoadXml的时候加了个头的字符串.
    而且,我在Reader里面已经标明了解码方式了,还是会出现乱码..不知道为什么....
    查看了Http头,里面就是gb2312类型的.
    `
    这个做完了想用LINQ读它.
    呵呵...自己做个用着顺手的翻译工具..
    有人说,充满技术的生活枯燥无味.. 我笑他们不懂.因为只有技术才能充实生活.. 学习就像生活,都需要善于总结,才能发现问题,取得进步.. 生活中充满了数学算式与结构,只要我们善于观察和思考..
    2009年9月15日 13:52

全部回复

  • 首先,你打印出str看是否有值
    再次,无需指定<?xml ...?>这段


    【孟子E章】
    2009年9月15日 14:03
    版主
  • 恩,有值是肯定的...
    但是,即使我在Reader里面指定了gb2312,解码方式还是不对...
    而且报上面说的异常..
    有人说,充满技术的生活枯燥无味.. 我笑他们不懂.因为只有技术才能充实生活.. 学习就像生活,都需要善于总结,才能发现问题,取得进步.. 生活中充满了数学算式与结构,只要我们善于观察和思考..
    2009年9月15日 14:04
  • 经测试,返回的不是 xml格式的文件内容,所以。你使用xmldocument是失败的。编码也应该是utf-8,完整测试代码

    <%@ Page Language="C#" Debug="true" %>
    
    <%@ Import Namespace="System.Xml" %>
    <%@ Import Namespace="System.IO" %>
    <%@ Import Namespace="System.Net" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
    
      protected void Page_Load(object sender, EventArgs e)
      {
        String url = String.Format(@"http://www.google.com/dictionary?langpair=en%7Czh-CN&q={0}&hl=zh-CN&aq=f", "孟宪会");
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        HttpWebResponse res = (HttpWebResponse)req.GetResponse();
        Stream requestStr = res.GetResponseStream();
        StreamReader reader = new StreamReader(requestStr, Encoding.UTF8);
        String str = reader.ReadToEnd();
        XmlDocument xml = new XmlDocument();
        //xml.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\" ?> " + str);
        this.TextBox1.Text = str;
      }
    
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title></title>
    </head>
    <body>
      <form id="form1" runat="server">
      <div>
      </div>
      <asp:TextBox ID="TextBox1" runat="server" Height="387px" TextMode="MultiLine" Width="656px"></asp:TextBox>
      </form>
    </body>
    </html>
    

    【孟子E章】
    2009年9月15日 14:10
    版主
  • 我之前用的是翻译句子的页面做的测试.没什么问题..
    用的是直接把字符串截取,得到有用的那段,那个用的是gb2312的编码..
    没想到这个不是了.呵呵...

    那有没有用DOM解析这个的方式?
    我看它返回的好像是整张网页..
    3Q啦~
    有人说,充满技术的生活枯燥无味.. 我笑他们不懂.因为只有技术才能充实生活.. 学习就像生活,都需要善于总结,才能发现问题,取得进步.. 生活中充满了数学算式与结构,只要我们善于观察和思考..
    2009年9月15日 14:24
  • 使用LINQ to XML吧,只需要引用System.Xml.Linq这个命名空间,使用起来非常方便。
    比如读取Skin元素的Value值,可以这么写:
                    XElement myXml = XElement.Load(@"CoonStr.xml");
                    var p = myXml.Element("Skin").Value;
    还有,load里面不需要指定"<?xml version=\"1.0\" encoding=\"utf-8\" ?> "。这个的。只需要写路径即可。
    2009年9月16日 10:51
  • 额...抱歉,忘记标答案了....
    这几天在写简历,还没有看HTML Parser...
    感谢孟版主了~
    有不会的再来请教.
    有人说,充满技术的生活枯燥无味.. 我笑他们不懂.因为只有技术才能充实生活.. 学习就像生活,都需要善于总结,才能发现问题,取得进步.. 生活中充满了数学算式与结构,只要我们善于观察和思考..
    2009年9月18日 9:39