恶心的XML之"根级别上的数据无效。 第 1 行,位置 1"

      就是今天,做了一个功能,在一个弹出页面操作几个表的数据,形成一个临时DataTable,然后将它转换为XML,然后再return到父级页面

父级页面,再将XML解析成DataTable再进行相关操作。


      恶心随之而来,再讲XML转换为DataTable的时候,总是报错“根级别上的数据无效。 第 1 行,位置 1",但是调试将xmlData参数直接写的时候,

不出错!


     或许微软的错误提示已经很明确,最前边的字符有问题,但是我们感觉凡胎肉眼看到的就是<,没错啊!

然后百啊百,可能<的前边还有空格啊回车之类的,至于怎么就有这个了,不得而知。


    那就想办法吧,找到xmlData的第一个<,然后截取<之后的所有字符串,然后在最前面+<


xmlData = "<" + xmlData.Substring(xmlData.IndexOf('<') + 1);


附完整代码:


XML转换DataSet方法

//将xml对象内容字符串转换为DataSet
        public static DataSet ConvertXMLToDataSet(string xmlData)
        {
                        xmlData = "<" + xmlData.Substring(xmlData.IndexOf('<') + 1);
            StringReader stream = null;
            XmlTextReader reader = null;
            try
            {
                DataSet xmlDS = new DataSet();
                stream = new StringReader(xmlData);
                //从stream装载到XmlTextReader
                reader = new XmlTextReader(stream);
                xmlDS.ReadXml(reader);
                return xmlDS;
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (reader != null) reader.Close();
            }
        }

DataSet转换XML方法
//将DataSet转换为xml对象字符串
        public static string ConvertDataSetToXML(DataSet xmlDS)
        {
            MemoryStream stream = null;
            XmlTextWriter writer = null;

            try
            {
                stream = new MemoryStream();
                //从stream装载到XmlTextReader
                writer = new XmlTextWriter(stream, Encoding.UTF8);

                //用WriteXml方法写入文件.
                xmlDS.WriteXml(writer);
                int count = (int)stream.Length;
                byte[] arr = new byte[count];
                stream.Seek(0, SeekOrigin.Begin);
                stream.Read(arr, 0, count);

                UTF8Encoding utf = new UTF8Encoding();
                return utf.GetString(arr).Trim().Replace("\n", "");
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (writer != null) writer.Close();
            }
        }


发布了48 篇原创文章 · 获赞 14 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/ewqewqqwe/article/details/51854024