DataSet.GetXml 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
傳回儲存於 DataSet 的資料之 XML 表示。
public:
System::String ^ GetXml();
public string GetXml ();
member this.GetXml : unit -> string
Public Function GetXml () As String
傳回
字串,儲存於 DataSet 的資料表示。
範例
下列範例會 DataSet 建立 和 DataTable,並新增範例數據,然後以 XML 格式顯示數據。
private static void DemonstrateGetXml()
{
// Create a DataSet with one table containing
// two columns and 10 rows.
DataSet dataSet = new DataSet("dataSet");
DataTable table = dataSet.Tables.Add("Items");
table.Columns.Add("id", typeof(int));
table.Columns.Add("Item", typeof(string));
// Add ten rows.
DataRow row;
for(int i = 0; i <10;i++)
{
row = table.NewRow();
row["id"]= i;
row["Item"]= "Item" + i;
table.Rows.Add(row);
}
// Display the DataSet contents as XML.
Console.WriteLine( dataSet.GetXml() );
}
Private Shared Sub DemonstrateGetXml()
' Create a DataSet with one table
' containing two columns and 10 rows.
Dim dataSet As New DataSet("dataSet")
Dim table As DataTable = dataSet.Tables.Add("Items")
table.Columns.Add("id", Type.GetType("System.Int32"))
table.Columns.Add("Item", Type.GetType("System.String"))
' Add ten rows.
Dim row As DataRow
Dim i As Integer
For i = 0 To 9
row = table.NewRow()
row("id") = i
row("Item")= "Item" & i
table.Rows.Add(row)
Next
' Display the DataSet contents as XML.
Console.WriteLine( dataSet.GetXml() )
End Sub
此範例示範如何將數據從 DataSet 寫入 XML 檔案,並從 XML 將數據讀入 DataSet。 此範例會建立一個具有兩個數據表的數據集、使用兩種方式將數據集匯出至 XML 檔案, (WriteXml 和 GetXml) ,並使用兩種方式 (ReadXml 和 InferXmlSchema) ,從 XML 檔案匯入數據集。
在編譯和執行範例之前,您必須在範例目錄中建立四個 XML 檔案。 首先,建立 ElementsWithAttributes.xml:
<MySchool>
<Course CourseID="C1045" Year="2012" Title="Calculus" Credits="4" DepartmentID="7">New</Course>
<Course CourseID="C1061" Year="2012" Title="Physics" Credits="4" DepartmentID="1" />
<Department DepartmentID="1" Name="Engineering" Budget="350000" StartDate="2007-09-01T00:00:00+08:00" Administrator="2" />
<Department DepartmentID="7" Name="Mathematics" Budget="250024" StartDate="2007-09-01T00:00:00+08:00" Administrator="3">Cancelled</Department>
</MySchool>
接下來,建立 ElementsWithChildElementsxml.xml:
<MySchool>
<Course>
<CourseID>C1045</CourseID>
<Year>2012</Year>
<Title>Calculus</Title>
<Credits>4</Credits>
<DepartmentID>7</DepartmentID>
</Course>
<Course>
<CourseID>C1061</CourseID>
<Year>2012</Year>
<Title>Physics</Title>
<Credits>4</Credits>
<DepartmentID>1</DepartmentID>
</Course>
<Course>
<CourseID>C2021</CourseID>
<Year>2012</Year>
<Title>Composition</Title>
<Credits>3</Credits>
<DepartmentID>2</DepartmentID>
</Course>
<Course>
<CourseID>C2042</CourseID>
<Year>2012</Year>
<Title>Literature</Title>
<Credits>4</Credits>
<DepartmentID>2</DepartmentID>
</Course>
<Department>
<DepartmentID>1</DepartmentID>
<Name>Engineering</Name>
<Budget>350000</Budget>
<StartDate>2007-09-01T00:00:00+08:00</StartDate>
<Administrator>2</Administrator>
</Department>
<Department>
<DepartmentID>2</DepartmentID>
<Name>English</Name>
<Budget>120000</Budget>
<StartDate>2007-09-01T00:00:00+08:00</StartDate>
<Administrator>6</Administrator>
</Department>
<Department>
<DepartmentID>4</DepartmentID>
<Name>Economics</Name>
<Budget>200000</Budget>
<StartDate>2007-09-01T00:00:00+08:00</StartDate>
<Administrator>4</Administrator>
</Department>
<Department>
<DepartmentID>7</DepartmentID>
<Name>Mathematics</Name>
<Budget>250024</Budget>
<StartDate>2007-09-01T00:00:00+08:00</StartDate>
<Administrator>3</Administrator>
</Department>
</MySchool>
現在建立 ElementsWithOnlyAttributes.xml:
<MySchool>
<Course CourseID="C1045" Year="2012" Title="Calculus" Credits="4" DepartmentID="7" />
<Course CourseID="C1061" Year="2012" Title="Physics" Credits="4" DepartmentID="1" />
<Department DepartmentID="1" Name="Engineering" Budget="350000" StartDate="2007-09-01T00:00:00+08:00" Administrator="2" />
<Department DepartmentID="7" Name="Mathematics" Budget="250024" StartDate="2007-09-01T00:00:00+08:00" Administrator="3" />
</MySchool>
最後,建立 RepeatingElements.xml:
<MySchool>
<Course>C1045</Course>
<Course>C1061</Course>
<Department>Engineering</Department>
<Department>Mathematics</Department>
</MySchool>
現在您可以編譯並執行下列原始程式碼。
using System;
using System.Data;
using System.IO;
using System.Text;
using System.Xml;
// Use WriteXml method to export the dataset.
static class DataTableHelper {
public static void WriteDataSetToXML(DataSet dataset, String xmlFileName) {
using (FileStream fsWriterStream = new FileStream(xmlFileName, FileMode.Create)) {
using (XmlTextWriter xmlWriter = new XmlTextWriter(fsWriterStream, Encoding.Unicode)) {
dataset.WriteXml(xmlWriter, XmlWriteMode.WriteSchema);
Console.WriteLine("Write {0} to the File {1}.", dataset.DataSetName, xmlFileName);
Console.WriteLine();
}
}
}
// Use GetXml method to get the XML data of the dataset and then export to the file.
public static void GetXMLFromDataSet(DataSet dataset, String xmlFileName) {
using (StreamWriter writer = new StreamWriter(xmlFileName)) {
writer.WriteLine(dataset.GetXml());
Console.WriteLine("Get Xml data from {0} and write to the File {1}.", dataset.DataSetName, xmlFileName);
Console.WriteLine();
}
}
// Use ReadXml method to import the dataset from the dataset.
public static void ReadXmlIntoDataSet(DataSet newDataSet, String xmlFileName) {
using (FileStream fsReaderStream = new FileStream(xmlFileName, FileMode.Open)) {
using (XmlTextReader xmlReader = new XmlTextReader(fsReaderStream)) {
newDataSet.ReadXml(xmlReader, XmlReadMode.ReadSchema);
}
}
}
// Display the columns and value of DataSet.
public static void ShowDataSet(DataSet dataset) {
foreach (DataTable table in dataset.Tables) {
Console.WriteLine("Table {0}:", table.TableName);
ShowDataTable(table);
}
}
// Display the columns and value of DataTable.
private static void ShowDataTable(DataTable table) {
foreach (DataColumn col in table.Columns) {
Console.Write("{0,-14}", col.ColumnName);
}
Console.WriteLine("{0,-14}", "");
foreach (DataRow row in table.Rows) {
if (row.RowState == DataRowState.Deleted) {
foreach (DataColumn col in table.Columns) {
if (col.DataType.Equals(typeof(DateTime))) {
Console.Write("{0,-14:d}", row[col, DataRowVersion.Original]);
}
else if (col.DataType.Equals(typeof(Decimal))) {
Console.Write("{0,-14:C}", row[col, DataRowVersion.Original]);
}
else {
Console.Write("{0,-14}", row[col, DataRowVersion.Original]);
}
}
}
else {
foreach (DataColumn col in table.Columns) {
if (col.DataType.Equals(typeof(DateTime))) {
Console.Write("{0,-14:d}", row[col]);
}
else if (col.DataType.Equals(typeof(Decimal))) {
Console.Write("{0,-14:C}", row[col]);
}
else {
Console.Write("{0,-14}", row[col]);
}
}
}
Console.WriteLine("{0,-14}", "");
}
}
// Display the columns of DataSet.
public static void ShowDataSetSchema(DataSet dataSet) {
Console.WriteLine("{0} contains the following tables:", dataSet.DataSetName);
foreach (DataTable table in dataSet.Tables) {
Console.WriteLine(" Table {0} contains the following columns:", table.TableName);
ShowDataTableSchema(table);
}
}
// Display the columns of DataTable
private static void ShowDataTableSchema(DataTable table) {
String columnString = "";
foreach (DataColumn col in table.Columns) {
columnString += col.ColumnName + " ";
}
Console.WriteLine(columnString);
}
}
class Program {
static void Main(string[] args) {
// Create the DataSet
DataSet school = new DataSet("MySchool");
DataTable course = CreateCourse();
DataTable department = CreateDepartment();
school.Tables.Add(course);
school.Tables.Add(department);
// Define the constraint between the tables.
ForeignKeyConstraint courseDepartFK = new ForeignKeyConstraint("CourseDepartFK", department.Columns["DepartmentID"], course.Columns["DepartmentID"]);
courseDepartFK.DeleteRule = Rule.Cascade;
courseDepartFK.UpdateRule = Rule.Cascade;
courseDepartFK.AcceptRejectRule = AcceptRejectRule.None;
course.Constraints.Add(courseDepartFK);
InsertDepartments(department);
InsertCourses(course);
// Export the dataset to the XML file.
Console.WriteLine("Data of the whole DataSet {0}", school.DataSetName);
DataTableHelper.ShowDataSet(school);
String xmlWithSchemaFileName = "WriterXMLWithSchema.xml";
String xmlGetDataFileName = "GetXML.xml";
// Use two ways to export the dataset to the Xml file.
DataTableHelper.WriteDataSetToXML(school, xmlWithSchemaFileName);
DataTableHelper.GetXMLFromDataSet(school, xmlGetDataFileName);
// Import the dataset from the XML file.
// Use two ways to import the dataset from the Xml file.
Console.WriteLine("Read Xml document into a new DataSet:");
DataSet newSchool = new DataSet("NewSchool");
DataTableHelper.ReadXmlIntoDataSet(newSchool, xmlWithSchemaFileName);
DataTableHelper.ShowDataSetSchema(newSchool);
Console.WriteLine();
Console.WriteLine("Infer a schema for a DataSet from an XML document:");
InferDataSetSchemaFromXml();
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
static DataTable CreateCourse() {
DataTable course = new DataTable("Course");
DataColumn[] cols ={
new DataColumn("CourseID",typeof(String)),
new DataColumn("Year",typeof(Int32)),
new DataColumn("Title",typeof(String)),
new DataColumn("Credits",typeof(Int32)),
new DataColumn("DepartmentID",typeof(Int32))};
course.Columns.AddRange(cols);
course.PrimaryKey = new DataColumn[] { course.Columns["CourseID"], course.Columns["Year"] };
return course;
}
static DataTable CreateDepartment() {
DataTable department = new DataTable("Department");
DataColumn[] cols = {
new DataColumn("DepartmentID", typeof(Int32)),
new DataColumn("Name",typeof(String)),
new DataColumn("Budget",typeof(Decimal)),
new DataColumn("StartDate",typeof(DateTime)),
new DataColumn("Administrator",typeof(Int32))};
department.Columns.AddRange(cols);
department.PrimaryKey = new DataColumn[] { department.Columns["DepartmentID"] };
return department;
}
static void InsertDepartments(DataTable department) {
Object[] rows = {
new Object[]{1,"Engineering",350000.00,new DateTime(2007,9,1),2},
new Object[]{2,"English",120000.00,new DateTime(2007,9,1),6},
new Object[]{4,"Economics",200000.00,new DateTime(2007,9,1),4},
new Object[]{7,"Mathematics",250024.00,new DateTime(2007,9,1),3}};
foreach (Object[] row in rows) {
department.Rows.Add(row);
}
}
static void InsertCourses(DataTable course) {
Object[] rows ={
new Object[]{"C1045",2012,"Calculus",4,7},
new Object[]{"C1061",2012,"Physics",4,1},
new Object[]{"C2021",2012,"Composition",3,2},
new Object[]{"C2042",2012,"Literature",4,2}};
foreach (Object[] row in rows) {
course.Rows.Add(row);
}
}
// Display the results of inferring schema from four types of XML structures
private static void InferDataSetSchemaFromXml() {
String[] xmlFileNames = {
@"ElementsWithOnlyAttributes.xml",
@"ElementsWithAttributes.xml",
@"RepeatingElements.xml",
@"ElementsWithChildElements.xml" };
foreach (String xmlFileName in xmlFileNames) {
Console.WriteLine("Result of {0}", Path.GetFileNameWithoutExtension(xmlFileName));
DataSet newSchool = new DataSet();
newSchool.InferXmlSchema(xmlFileName, null);
DataTableHelper.ShowDataSetSchema(newSchool);
Console.WriteLine();
}
}
}
備註
呼叫這個方法與呼叫 WriteXmlXmlWriteMode 時設定為 IgnoreSchema相同。
GetXml 會以字串的形式傳回 XML,因此需要比 WriteXml 將 XML 寫入檔案更多的額外負荷。
如果您使用架構推斷建 DataSet 置 ,並使用 XML 或 Web 服務將它串行化,數據行順序可能會變更。