DataSet ds = new DataSet();
            //StringReader sr = new StringReader(xmlstr);
            string url ="http://www.xx.net/xx.aspx";
            WebRequest wreq = WebRequest.Create(url);
            wreq.Method = "get";
            HttpWebResponse wersp = (HttpWebResponse)wreq.GetResponse();
            Stream s = wersp.GetResponseStream();
            StreamReader sd = new StreamReader(s, System.Text.Encoding.GetEncoding("gb2312"));
            string sdstr = sd.ReadToEnd();
            if (!string.IsNullOrEmpty(sdstr))
            {
                StringReader strred = new StringReader(sdstr);
                ds.ReadXml(sdstr);
                sd.Close();
                if (ds != null && ds.Tables.Count > 0)
                {
                    this.gvInfo.DataSource = ds.Tables[0].DefaultView;
                }
            }
在ds.ReadXml(sdstr);时出现"路径中有非法字符"的错误

解决方案 »

  1.   

    看看你的sdstr是件么,
    DataSet.ReadXml (String) 参数是xml文件名
      

  2.   

    String是xml格式数据,昨天还能读,今天不行了.晕
      

  3.   

    先把得到的string转成XMLDocument
      

  4.   

    先用XmlDocument加载,然后再用DataSet读取xml文档
      

  5.   

    DataSet.ReadXml (String)是xml格式数据字符串??不是啦,你看看MSDN
    而且你报的“路径中有非法字符”显然是文件路径不对
    你还是直接用流试试
    DataSet.ReadXml(sd )
      

  6.   

    用这种方法读时会出现"缺少根元素"的错误
    得到的xml如下<?xml version='1.0' standalone='yes'?><guestlist><guest><guestid>guest1678970144</guestid><flag>0</flag><kehuid></kehuid><lastdate>2008-3-29 12:23:31</lastdate></guest></guestlist>
      

  7.   

    sd.ReadToEnd();
    你打出来看看,是不是和上面的一样,
    上面的XML是合法的,应该不会有这种情况
      

  8.   

    上面的xml就是用sd.ReadToEnd()得出来的.
    真的很奇怪的问题. 
      

  9.   

    实在没办法,自己写正则来弄了string aa = "<?xml version='1.0' standalone='yes'?><guestlist><guest><guestid>guest1708591389</guestid><flag>1</flag><kehuid>mengfa1001</kehuid><lastdate>2008-3-29 11:02:29</lastdate></guest><guest><guestid>guest1818064835</guestid><flag>1</flag><kehuid>mengfa1001</kehuid><lastdate>2008-3-29 11:02:26</lastdate></guest><guest><guestid>guest1708591389</guestid><flag>1</flag><kehuid>mengfa1001</kehuid><lastdate>2008-3-29 11:02:29</lastdate></guest><guest><guestid>guest1818064835</guestid><flag>1</flag><kehuid>mengfa1001</kehuid><lastdate>2008-3-29 11:02:26</lastdate></guest></guestlist>";
                DataTable dt = this.getDtForXml(aa);
                this.gvInfo.DataSource = dt;
    private DataTable getDtForXml(string xmlstr) 
            {
                DataTable dt = new DataTable("guest");
                dt.Columns.Add("guestid", typeof(string));
                dt.Columns.Add("flag", typeof(string));
                dt.Columns.Add("kehuid", typeof(string));
                dt.Columns.Add("lastdate", typeof(string));
                ArrayList al = new ArrayList();
                Regex rg = new Regex("(?<=<guest>).*?(?=</guest>)", RegexOptions.IgnoreCase);
                MatchCollection mc = rg.Matches(xmlstr);
                foreach (Match mt in mc) 
                {
                    if (!string.IsNullOrEmpty(mt.Value)) 
                    {
                        al.Add(mt.Value);
                    }
                }
                for (int i = 0; i < al.Count; i++) 
                {
                    DataRow dr = dt.NewRow();
                    dr["guestid"] = this.getXmlColl(Convert.ToString(al[i]), "guestid");
                    dr["flag"] = this.getXmlColl(Convert.ToString(al[i]), "flag");
                    dr["kehuid"] = this.getXmlColl(Convert.ToString(al[i]), "kehuid");
                    dr["lastdate"] = this.getXmlColl(Convert.ToString(al[i]), "lastdate");
                    dt.Rows.Add(dr);
                }
                return dt;
            }
            private string getXmlColl(string instr,string collname)
            {
                string outs = "";
                ArrayList al = new ArrayList();
                Regex rg = new Regex("(?<=<" + collname + ">).*?(?=</" + collname + ">)", RegexOptions.IgnoreCase);
                MatchCollection mc = rg.Matches(instr);
                foreach (Match mt in mc)
                {
                    if (!string.IsNullOrEmpty(mt.Value))
                    {
                        outs=mt.Value;
                    }
                }
                return outs;
            }