做一个winForm程序,知道目标网页的url(类似“http://www.aaa.com.cn/datasource/datasource.aspx?username=张三”的形式),用IE浏览器打开之,是以xml格式显示的(类似下面的形式)。我想获得<Detail>元素的值,即:“张三,北京市人,1982年出生,现任职于某某公司.Net软件工程师一职”。怎么办呢?
<?xml version="1.0" encoding="GB18030" ?>
- <ct:UpdateDetails Date="20050601 08:00" xmlns:ct="http://www.aaa.com.cn/">
  - <!-- This document contains user update information.
  -->
  - <details title="张三">
    - <Content>
      <datasource>张三的信息</datasource>
      <Detail>张三,北京市人,1982年出生,现任职于某某公司.Net软件工程师一职</Detail>
  </details>
</ct:UpdateDetails>
------------------------
我想用WebRequest去请求、用HttpWebResponse响应、用StreamReader来把整个xml格式的内容读到一个textBox1控件中,然后对textBox1控件中的文本检索,获得<Detail>元素的值。但是textBox1控件中显示出现乱码,而且当xml格式的内容很多时,读不完。请高手们帮助一下,最好给一个完整的例子。谢谢了先!

解决方案 »

  1.   

    使用webbrowser吧~~
    我现在正用它呢!!!
    前两天做的短信接口跟你的情况一样~
      

  2.   

    用webbrowser1.Navigate(url)加载网页后,怎样获得 <Detail>元素的值呢?而且webbrowser没有SaveAs另存为的功能呀,不能另存为xml文件,再从xml文件中读取<Detail>元素的值呀。
      

  3.   

    使用webbrowser的Document属性~~
    算了。。
    我把代码给你吧~~若使用Document属性,必须判断文档是否加载成功,触发webbrowser的DocumentCompleted事件
                string url = "http://www.aaa.com.cn/datasource/datasource.aspx?username=张三";
                        //发送信息
                        webBrowser1.Navigate(url);
                        //判断webBrowser的加载是否完成
                        webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
                    
    在它的webBrowser1_DocumentCompleted的事件中写如下代码:
    if (e.Url.Equals(webBrowser1.Document.Url))
            {
                flag = true;//此变量用来判断是否加载完毕
                if (flag == true)
                {
                    try
                    {
                        //填充Document
                        HtmlDocument hdoc = webBrowser1.Document;
                        //查找标记为HTML的元素集合
                        HtmlElementCollection hec = hdoc.GetElementsByTagName("HTML");
                        //遍历元素集合
                        foreach (HtmlElement he in hec)
                        {
                            string str = he.InnerText.Trim();
                            //查找服务器返回结果(我在偷懒,使用的字符串截取;不管怎么样,结果是对的)
                            if (str.Substring(70, 1) == "0")
                            {
                                cmd = new MySqlCommand("update sms2 set send_flag=1 where sms_id=" + Convert.ToInt32(smsid) + "", con);
                                cmd.ExecuteNonQuery();
                                MessageBox.Show("已发送");
                            }
                            else
                            {
                                MessageBox.Show("错误");
                            }
                        }
                                        }
                    catch (Exception ex)
                    {
                        label1.Text = ex.ToString();
                    }            }代码有些乱,慢慢研究吧~~我把XML弄成字符串给读出来了
      

  4.   

    请去下载我的资源   (完全读取XML) 
    然后结贴,谢谢
      

  5.   

    if (e.Url.Equals(webBrowser1.Document.Url)) 
          
    e.url 是这种事件参数特有的方法吗?还有那些会有 ?