请教:如何将XML字符串直接读入dataset,而不从文件读取 请教:如何将XML字符串直接读入dataset,而不从文件读取 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 using System;using System.Xml;namespace prjCx{ /// <summary> /// Config 的摘要说明。 /// </summary> public class Config { private String msFileName = null; public String ConfigFile { get { return this.msFileName; } set { if (System.IO.File.Exists(value.Trim())) { this.msFileName = value.Trim(); } } } public Config() { this.msFileName = String.Empty; } public Config(String ConfigFile) { this.ConfigFile = ConfigFile.Trim(); } public bool ReadConfig(String ContentName, out String ContentValue) { bool bFlag = false; ContentValue = String.Empty; if (!System.IO.File.Exists(this.msFileName)) { return bFlag; } try { System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); xmlDoc.Load(this.msFileName); System.Xml.XmlNode xmlNode = xmlDoc.SelectSingleNode(ContentName); ContentValue = xmlNode.InnerText; bFlag = true; } catch (XmlException xmle) { System.Console.WriteLine(xmle.Message); } return bFlag; } /// <summary> /// 读XML文件 /// </summary> /// <param name="ContentName">节点名</param> /// <param name="PropertyName">属性名</param> /// <param name="PropertyValue">属性值(Ref)</param> /// <returns></returns> public bool ReadConfig(String ContentName, String PropertyName, out String PropertyValue) { bool bFlag = false; PropertyValue = String.Empty; if (!System.IO.File.Exists(this.msFileName)) { return bFlag; } try { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(this.msFileName); XmlNode xmlNode = xmlDoc.SelectSingleNode(ContentName); XmlAttributeCollection xmlAttr = xmlNode.Attributes; for (int i = 0; i < xmlAttr.Count; ++i) { if (xmlAttr.Item(i).Name == PropertyName) { PropertyValue = xmlAttr.Item(i).Value; bFlag = true; break; } } } catch (XmlException xmle) { System.Console.WriteLine(xmle.Message); } return bFlag; } public bool WriteConfig(String ContentName, String ContentValue) { bool bFlag = false; if (!System.IO.File.Exists(this.msFileName)) { return bFlag; } try { System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); xmlDoc.Load(this.msFileName); System.Xml.XmlNode xmlNode = xmlDoc.SelectSingleNode(ContentName); xmlNode.InnerText = ContentValue; xmlDoc.Save(this.msFileName); bFlag = true; } catch (XmlException xmle) { System.Console.WriteLine(xmle.Message); } return bFlag; } /// <summary> /// 写XML文件 /// </summary> /// <param name="ContentName">节点名</param> /// <param name="PropertyName">属性名</param> /// <param name="PropertyValue">属性值</param> /// <returns></returns> public bool WriteConfig(String ContentName, String PropertyName, String PropertyValue) { bool bFlag = false; if (!System.IO.File.Exists(this.msFileName)) { return bFlag; } try { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(this.msFileName); XmlNode xmlNode = xmlDoc.SelectSingleNode(ContentName); XmlAttributeCollection xmlAttr = xmlNode.Attributes; for (int i = 0; i < xmlAttr.Count; ++i) { if (xmlAttr.Item(i).Name == PropertyName) { xmlAttr.Item(i).Value = PropertyValue; bFlag = true; break; } } xmlDoc.Save(this.msFileName); bFlag = true; } catch (XmlException xmle) { System.Console.WriteLine(xmle.Message); } return bFlag; } }} /// <summary> /// 把Xml字符窜转换成DataSet /// </summary> /// <param name="xmlString"></param> /// <returns></returns> public static DataSet XmlStringToDataSet(string xmlString) { DataSet st = new DataSet(); //string dataSetString = ""; using(System.IO.StringReader sr =new StringReader(xmlString)) { st.ReadXml(sr); } return st; }这个是我们现在用的,代码少,容易懂。 但是昨天我用这个方法的时候dataset里有两个表,却只能将一个表的XML读入dataset代码如下//这里是将数据写入字符串 StringBuilder sb = new StringBuilder(); XmlWriter xw = XmlWriter.Create(sb); this.formDesignControl1.SchemaDataSet.WriteXml(xw, XmlWriteMode.DiffGram); this.xmlControl1.XML = sb.ToString();//下面是读取字符串 DataSet ds = new DataSet(); TextReader stringReader = new StringReader(this.xmlControl1.XML); ds.ReadXml(stringReader); xmlString是一段xml格式的字符串。 C#中tabControl1控件中的TabPage显示方式? C# 读写XML文件的问题 ACCESS获取刚添加数据的ID,总是得到上一条记录的ID?? 关于图形绘制的保存 c#调用MSsql存储过程返回值的问题 求助在自己的程序里调用别的可执行程序 帮忙看两段代码,看怎样可以建立起通讯关系。我在调试是总是出错! (100分求解)极其郁闷!直接调用dll可以,包装成webService方法就不行! 100 分求解入门级问题,顶者有分 怎样通过 XML 实现在两个不同类型的数据库之间复制表? 请教一个动态数据组组合算法问题 端口号问题
using System.Xml;namespace prjCx
{
/// <summary>
/// Config 的摘要说明。
/// </summary>
public class Config
{
private String msFileName = null; public String ConfigFile
{
get
{
return this.msFileName;
}
set
{
if (System.IO.File.Exists(value.Trim()))
{
this.msFileName = value.Trim();
}
}
} public Config()
{
this.msFileName = String.Empty;
} public Config(String ConfigFile)
{
this.ConfigFile = ConfigFile.Trim();
} public bool ReadConfig(String ContentName, out String ContentValue)
{
bool bFlag = false; ContentValue = String.Empty; if (!System.IO.File.Exists(this.msFileName))
{
return bFlag;
} try
{
System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
xmlDoc.Load(this.msFileName);
System.Xml.XmlNode xmlNode = xmlDoc.SelectSingleNode(ContentName);
ContentValue = xmlNode.InnerText; bFlag = true;
}
catch (XmlException xmle)
{
System.Console.WriteLine(xmle.Message);
} return bFlag;
}
/// <summary>
/// 读XML文件
/// </summary>
/// <param name="ContentName">节点名</param>
/// <param name="PropertyName">属性名</param>
/// <param name="PropertyValue">属性值(Ref)</param>
/// <returns></returns>
public bool ReadConfig(String ContentName, String PropertyName, out String PropertyValue)
{
bool bFlag = false; PropertyValue = String.Empty; if (!System.IO.File.Exists(this.msFileName))
{
return bFlag;
} try
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(this.msFileName); XmlNode xmlNode = xmlDoc.SelectSingleNode(ContentName); XmlAttributeCollection xmlAttr = xmlNode.Attributes; for (int i = 0; i < xmlAttr.Count; ++i)
{
if (xmlAttr.Item(i).Name == PropertyName)
{
PropertyValue = xmlAttr.Item(i).Value;
bFlag = true;
break;
}
}
}
catch (XmlException xmle)
{
System.Console.WriteLine(xmle.Message);
} return bFlag;
} public bool WriteConfig(String ContentName, String ContentValue)
{
bool bFlag = false; if (!System.IO.File.Exists(this.msFileName))
{
return bFlag;
} try
{
System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
xmlDoc.Load(this.msFileName);
System.Xml.XmlNode xmlNode = xmlDoc.SelectSingleNode(ContentName);
xmlNode.InnerText = ContentValue; xmlDoc.Save(this.msFileName); bFlag = true;
}
catch (XmlException xmle)
{
System.Console.WriteLine(xmle.Message);
} return bFlag;
}
/// <summary>
/// 写XML文件
/// </summary>
/// <param name="ContentName">节点名</param>
/// <param name="PropertyName">属性名</param>
/// <param name="PropertyValue">属性值</param>
/// <returns></returns>
public bool WriteConfig(String ContentName, String PropertyName, String PropertyValue)
{
bool bFlag = false; if (!System.IO.File.Exists(this.msFileName))
{
return bFlag;
} try
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(this.msFileName); XmlNode xmlNode = xmlDoc.SelectSingleNode(ContentName); XmlAttributeCollection xmlAttr = xmlNode.Attributes; for (int i = 0; i < xmlAttr.Count; ++i)
{
if (xmlAttr.Item(i).Name == PropertyName)
{
xmlAttr.Item(i).Value = PropertyValue;
bFlag = true;
break;
}
} xmlDoc.Save(this.msFileName); bFlag = true;
}
catch (XmlException xmle)
{
System.Console.WriteLine(xmle.Message);
} return bFlag;
}
}
}
/// 把Xml字符窜转换成DataSet
/// </summary>
/// <param name="xmlString"></param>
/// <returns></returns>
public static DataSet XmlStringToDataSet(string xmlString)
{
DataSet st = new DataSet();
//string dataSetString = "";
using(System.IO.StringReader sr =new StringReader(xmlString))
{
st.ReadXml(sr);
}
return st;
}这个是我们现在用的,代码少,容易懂。
//这里是将数据写入字符串
StringBuilder sb = new StringBuilder();
XmlWriter xw = XmlWriter.Create(sb);
this.formDesignControl1.SchemaDataSet.WriteXml(xw, XmlWriteMode.DiffGram);
this.xmlControl1.XML = sb.ToString();//下面是读取字符串
DataSet ds = new DataSet();
TextReader stringReader = new StringReader(this.xmlControl1.XML);
ds.ReadXml(stringReader);