就是今天,做了一个功能,在一个弹出页面操作几个表的数据,形成一个临时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, 0, count);
UTF8Encoding utf = new UTF8Encoding();
return utf.GetString(arr).Trim().Replace("\n", "");
}
catch (System.Exception ex)
{
throw ex;
}
finally
{
if (writer != null) writer.Close();
}
}