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

前端之家收集整理的这篇文章主要介绍了恶心的XML之"根级别上的数据无效。 第 1 行,位置 1"前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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


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

不出错!


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

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


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


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


附完整代码


XML转换DataSet方法

  1. //将xml对象内容字符串转换为DataSet
  2. public static DataSet ConvertXMLToDataSet(string xmlData)
  3. {
  4. xmlData = "<" + xmlData.Substring(xmlData.IndexOf('<') + 1);
  5. StringReader stream = null;
  6. XmlTextReader reader = null;
  7. try
  8. {
  9. DataSet xmlDS = new DataSet();
  10. stream = new StringReader(xmlData);
  11. //从stream装载到XmlTextReader
  12. reader = new XmlTextReader(stream);
  13. xmlDS.ReadXml(reader);
  14. return xmlDS;
  15. }
  16. catch (System.Exception ex)
  17. {
  18. throw ex;
  19. }
  20. finally
  21. {
  22. if (reader != null) reader.Close();
  23. }
  24. }

DataSet转换XML方法
  1. //将DataSet转换为xml对象字符串
  2. public static string ConvertDataSetToXML(DataSet xmlDS)
  3. {
  4. MemoryStream stream = null;
  5. XmlTextWriter writer = null;
  6.  
  7. try
  8. {
  9. stream = new MemoryStream();
  10. //从stream装载到XmlTextReader
  11. writer = new XmlTextWriter(stream,Encoding.UTF8);
  12.  
  13. //用WriteXml方法写入文件.
  14. xmlDS.WriteXml(writer);
  15. int count = (int)stream.Length;
  16. byte[] arr = new byte[count];
  17. stream.Seek(0,SeekOrigin.Begin);
  18. stream.Read(arr,count);
  19.  
  20. UTF8Encoding utf = new UTF8Encoding();
  21. return utf.GetString(arr).Trim().Replace("\n","");
  22. }
  23. catch (System.Exception ex)
  24. {
  25. throw ex;
  26. }
  27. finally
  28. {
  29. if (writer != null) writer.Close();
  30. }
  31. }

猜你在找的XML相关文章