微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

恶心的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,count);

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。