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