就是今天,做了一个功能,在一个弹出页面操作几个表的数据,形成一个临时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();
- }
- }