XmlDataDocument类表示DataSet类的XML文档对象。通过将一个XmlDataDocument类实例绑定到DataSet,并在数据修改时保持同步,可以在关系数据和层次数据之间形成交互关系。
XmlDataDocument类是XmlDocument类的派生类。在需要对XML数据进行处理时,XmlDataDocument类实例和DataSet类实例保持同步,优于将数据加载到DataSet再处理。在不同的系统平台之间采用XML交换数据时,使用XmlDataDocument类实例和DataSet类实例同步机制,可以直接将其他系统平台返回的XML数据反映到DataSet类实例中。
DataSet类实例和XmlDataDocument类实例在同步的时候使用同一组缓存数据。也就是说在任何一方,DataSet类实例或者XmlDataDocument类实例上的修改,另一方的数据可以即时反映出来。DataSet类实例和XmlDataDocument类实例的同步给数据处理带来了很大的灵活性。以为同一组数据具有两种类的表现形式,所以,这组数据既可以作为DataSet类实例进行关系数据的处理,也可以作为XmlDataDocument类实例进行层次数据的处理。
语法定义:
public class XmlDataDocument : XmlDocument
下面演示使用不同的方法建立XmlDataDocument类的实例
//创建一个新的XmlDataDocument类实例
XmlDataDocument datadoc = new XmlDataDocument();
//从原有的DataSet类实例创建XmlDataDocument类实例
DataSet ds = new DataSet();
XmlDataDocument = new XmlDataDocument(ds);
方法:
Load:将XML文档数据赋予XmlDocument类
LoadXml:直接将XML字符串赋予XmlDocument类
Save:保存XML文档到指定的对象中
ReadNode:从XmlReader 创建节点
ImportNode:从外部导入一个节点到当前文档
WriteTo:使用XmlWriter保存XML文档对象
CreateCDataSection: 创建CData节点
CreateComment:创建注释节点
CreateDocumentFragment:创建XML文档片段
CreateDocumentType:创建新的XML文档类型
CreateEntityReference:创建实体引用
CreateProcessingInstruction:创建处理指令
CreateSignificantWhitespace:创建空白符号
CreateTextNode:创建文本节点
CreateWhitespace:创建空白符号
CreateXmlDeclaration:创建一个XML声明
GetElementById:获得指定ID的Element
GetElementsByTagName:获得指定名称Element的子节点列表
GetRowFromElement:获得与指定XmlElement关联的DataRow类实例
Normalize:将XML文档数据“正常化”
下面演示如何把DataSet数据加载到XmlDataDocument实例中,然后参加一条数据记录。代码如下
static void Main(string[] args)
{
System.IO.StringReader builder = new System.IO.StringReader("<employee>" +
"<name></name><age></age><sex></sex><email></email></employee>");
XmlReader reader = XmlReader.Create(builder);
DataSet ds = new DataSet("empdata");
ds.EnforceConstraints = false;
ds.ReadXmlSchema(reader);
reader.Close();
XmlDataDocument datadoc = new XmlDataDocument(ds);
//创建数据
XmlElement root = datadoc.CreateElement("empdata");
datadoc.AppendChild(root);
XmlElement employee = datadoc.CreateElement("employee");
root.AppendChild(employee);
XmlElement name = datadoc.CreateElement("name");
name.InnerText = "John";
employee.AppendChild(name);
XmlElement age = datadoc.CreateElement("age");
age.InnerText = "25";
employee.AppendChild(age);
XmlElement sex = datadoc.CreateElement("sex");
sex.InnerText = "male";
employee.AppendChild(sex);
XmlElement email = datadoc.CreateElement("email");
email.InnerText = "john@hotmail.com";
employee.AppendChild(email);
//显示DataSet中的数据
Console.WriteLine("姓名:" + ds.Tables[0].Rows[0]["name"]);
Console.WriteLine("年龄:" + ds.Tables[0].Rows[0]["age"]);
Console.WriteLine("性别:" + ds.Tables[0].Rows[0]["sex"]);
Console.WriteLine("email:" + ds.Tables[0].Rows[0]["email"]);
Console.ReadLine();
}
注意,"ds.EnforceConstrains=false;" 这一行代码用来去掉DataSet类的强制约束规则,否则不能修改数据。
上面代码输出结果为:
姓名:John
年龄:25
性别:male
email:john@hotmail.com
属性:
Attributes:包含节点属性的集合
ChildNodes :包含所有子节点的集合
DataSet:获取XML数据文档对象的DataSet类表现形式
DocumentElement:获取Xml数据文档对象的根XmlElement
等等
static void ShowEmpData()
{
System.IO.StringReader bulider = new System.IO.StringReader("<employee><name>John</name>" +
"<age>25</age><sex>male</sex><email>john@hotmail.com</email></employee>");
XmlReader reader = XmlReader.Create(bulider);
DataSet ds = new DataSet("empdata");
ds.EnforceConstraints = false;
ds.ReadXml(reader);
reader.Close();
XmlDataDocument datadoc = new XmlDataDocument(ds);
DataSet getds = datadoc.DataSet;
//显示XmlDataDocument类实例中DataSet属性的数据
Console.WriteLine("姓名:" + ds.Tables[0].Rows[0]["name"]);
Console.WriteLine("年龄:" + ds.Tables[0].Rows[0]["age"]);
Console.WriteLine("性别:" + ds.Tables[0].Rows[0]["sex"]);
Console.WriteLine("email:" + ds.Tables[0].Rows[0]["email"]);
}
上面代码输出结果为:
姓名:John
年龄:25
性别:male
email:john@hotmail.com