本人第一次发帖 请大家多多见谅我出现了个难题 请高手帮我指点一下
逻辑:注册 同时插入一条数据(用户相关信息)到两个数据库中 具体实现,地址栏传参 生成XML文件 调用值进行判断
下面是XML生成的内容
Response.Write("<?xml version='1.0' encoding='utf-8' ?>");
Response.Write("<gameConfig>");
Response.Write("<stateid>0</stateid>"); // 注册成功为0
Response.Write("</gameConfig>");
表示注册成功
现在要读取stateid节点的值
方法:
GameUserAPIPath = "../api/game/GameUser.aspx";
GameUserAPIPath += "?username=" + UserName + "&password=" + John.Game.Encode.Encode32(pwd, 32) + "&FaceID=" + Request.For["UserFace"].ToString() + "&Recommender=" + RecommenderID + "&tag=reg";//链接地址+参数
stateid = John.Game.XmlControl.GetXMLValue("stateid", GameUserAPIPath);//调用方法读取stateid节点的值下面是读取XML方法
/// <summary>
        /// 读取XML配置文件
        /// </summary>
        /// <param name="Target">XML节点名称</param>
        /// <param name="ConfigPathName">XML文件地址</param>
        /// <returns></returns>
        public static string GetXMLValue(string Target, string XmlPath)
        {
            string path = GetWebUrl() + XmlPath;
            DataSet ds = new DataSet();
          // path = StripHTML(path);            ds.ReadXml(path);
            if (ds.Tables[0].Rows.Count > 0)
            {
                return ds.Tables[0].Rows[0][0].ToString();
            }
            else
            {
                return string.Empty;
            }
        }        ///// 除去所有在HTML元素中标记
        //public static string StripHTML(string strHtml)
        //{
        //    string strOutput = strHtml;
        //    Regex regex = new Regex(@"<[^>]+>|</[^>]+>");
        //    strOutput = regex.Replace(strOutput, "");
        //    return strOutput;        //}        //返回一个完整路径
        public static string GetWebUrl()
        {
            string allUrl = HttpContext.Current.Request.Url.ToString();
            int pos = allUrl.LastIndexOf('/');
            return allUrl.Substring(0, pos + 1);
        }
//这是错误
System.Xml.XmlException: 缺少根元素。 
在 System.Xml.XmlTextReaderImpl.Throw(Exception e) 
在 System.Xml.XmlTextReaderImpl.ThrowWithoutLineInfo(String res) 
在 System.Xml.XmlTextReaderImpl.ParseDocumentContent()
在 System.Xml.XmlTextReaderImpl.Read() 
在 System.Xml.XmlTextReader.Read() 
在 System.Xml.XmlReader.MoveToContent() 
在 System.Data.DataSet.ReadXml(XmlReader reader, Boolean denyResolving) 
在 System.Data.DataSet.ReadXml(String fileName) 
在 John.Game.XmlControl.GetXMLValue(String Target, String XmlPath)请各位高人帮忙指点下 小弟是在无能为力  再此谢过 第一次发帖 不懂的规矩比较多 我会慢慢熟悉!

解决方案 »

  1.   

    沙发 补充一下 当调试到 ds.ReadXml(path); 处会发生异常信息 缺少根元素path 的值是http://localhost:1472/api/game/GameUser.aspx?username=gu0001&password=e10adc3949ba59abbe56e057f20f883e&FaceID=0&Recommender=lu004&tag=reg输出的是
     <?xml version="1.0" encoding="utf-8" ?> 
    - <gameConfig>
      <stateid>1</stateid> 
      </gameConfig>请大家帮我看看 指点一二 小弟不盛感激
      

  2.   

    你这个dataset和xml的用法有问题。
    正确的方法是用dataset先构造一个完整的表,就像sql的表一样
    然后,直接dataset.writexml
    不需要自己写如xml的头、字段,举个例子:DataSet ds = new ...;ds.Tables.Add("gameConfig");
    ds.Tables[0].Columns.Add("stateid", typeof(int));
    ds.Tables[0].Rows[0].Add(new object[] {1});
    ds.WriteXML("Save.xml");
      

  3.   

    读取的时候,不能直接ReadXML:
    DataSet ds = new ...;
    ds.ReadXML("Save.xml");
    这样可能会有异常。
    正确的方法,要先构造正确的表格结构,然后ReadXML
    DataSet ds = new ...; ds.Tables.Add("gameConfig"); 
    ds.Tables[0].Columns.Add("stateid", typeof(int)); 
    ds.ReadXML("Save.xml");int statid = ds.Tables[0].Rows[0][0];
    ...
      

  4.   

    现在看明白了吗?你现在的问题是读取xml出问题对不?
      

  5.   

    恩 三楼的意思是不用Response.Write 输出么?
    直接用dataset?
      

  6.   

    没错,我的意思就是直接用dataset.writexml
    完全不需要自己指定xml里面的任何文本字段你这个写的是web程序,写API程序也是一样,
    不要自己尝试直接写xml内容,一来不必要,二来不安全
    你写错一个字母,xml就读不出来了。
      

  7.   


    查不出哪里有问题,问题就在:.net framwork还没有强大到可以猜出你xml的表结构。
    必须你自己告诉.net你的xml里面表结构是怎样的,他可以辅助将xml数据格式化。
      

  8.   

    另外,就xml文件操作,我分享一个心得:
    默认的dataset.writexml写出的xml文件比较繁杂,有很多废话,比如schema或者microsoft之类
    我们一个简单的保存设置的xml不需要这些。
    我个人比较喜欢简洁的xml:
    <xml ....>
    <rootnode>
     <configuration>
      <Coordinates>
       <X>12</X>
       <Y>15</Y>
       <X>123</X>
       <Y>78</Y>
       ...
      </Coordinates>
     </configuration>
    </roonode>
    想要简洁的xml怎么办?
    很简单,这么办:
    const string XML_PERSONEL = "PersonalProfile.xml";
    System.Xml.XmlTextWriter file = new System.Xml.XmlTextWriter(XML_PERSONAL, Encoding.Unicode);
    file.Formatting = System.Xml.Formatting.Indented;
    dsPersonal.WriteXml(file, XmlWriteMode.IgnoreSchema);