就是今天,做了一个功能,在一个弹出页面操作几个表的数据,形成一个临时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 举报,一经查实,本站将立刻删除。