DataTable.ReadXml 方法

定義

將 XML 結構描述和資料讀入 DataTable

多載

ReadXml(Stream)

使用指定的 DataTable,將 XML 結構描述和資料讀入 Stream

ReadXml(TextReader)

使用指定的 DataTable,將 XML 結構描述和資料讀入 TextReader

ReadXml(String)

將 XML 結構描述和資料從指定的檔案讀入 DataTable

ReadXml(XmlReader)

使用指定的 DataTable,將 XML 結構描述和資料讀入 XmlReader

備註

方法 ReadXml 提供一種方式,唯讀取數據,或是從 XML 檔讀取數據和架構 DataTable ,而 ReadXmlSchema 方法則只讀取架構。 若要讀取資料和架構,請使用包含 XmlReadMode 參數的其中ReadXML一個多載,並將其值設定為 ReadSchema

請注意, WriteXmlWriteXmlSchema 方法也是如此。 若要從 寫入 XML 數據,或同時 DataTable寫入架構和數據,請使用 WriteXml 方法。 若要只撰寫架構,請使用 WriteXmlSchema 方法。

備註

InvalidOperationException如果要讀取或寫入至 實IDynamicMetaObjectProvider作且未實IXmlSerializable作 的資料行類型,DataRow則會擲回 。

ReadXml(Stream)

來源:
DataTable.cs
來源:
DataTable.cs
來源:
DataTable.cs

使用指定的 DataTable,將 XML 結構描述和資料讀入 Stream

C#
public System.Data.XmlReadMode ReadXml (System.IO.Stream? stream);
C#
public System.Data.XmlReadMode ReadXml (System.IO.Stream stream);

參數

stream
Stream

衍生自 Stream 的物件。

傳回

XmlReadMode,用來讀取資料。

範例

下列範例會建立包含兩個資料列和十個 DataTable 資料列的 。 此範例會 DataTable 藉由叫 WriteXml 用 方法,將架構和數據寫入記憶體數據流。 此範例會建立第二 DataTable 個 ,並呼叫 ReadXml 方法來填入架構和數據。

C#
private static void DemonstrateReadWriteXMLDocumentWithStream()
{
    DataTable table = CreateTestTable("XmlDemo");
    PrintValues(table, "Original table");

    // Write the schema and data to XML in a memory stream.
    System.IO.MemoryStream xmlStream = new System.IO.MemoryStream();
    table.WriteXml(xmlStream, XmlWriteMode.WriteSchema);

    // Rewind the memory stream.
    xmlStream.Position = 0;

    DataTable newTable = new DataTable();
    newTable.ReadXml(xmlStream);

    // Print out values in the table.
    PrintValues(newTable, "New table");
}

private static DataTable CreateTestTable(string tableName)
{
    // Create a test DataTable with two columns and a few rows.
    DataTable table = new DataTable(tableName);
    DataColumn column = new DataColumn("id", typeof(System.Int32));
    column.AutoIncrement = true;
    table.Columns.Add(column);

    column = new DataColumn("item", typeof(System.String));
    table.Columns.Add(column);

    // Add ten rows.
    DataRow row;
    for (int i = 0; i <= 9; i++)
    {
        row = table.NewRow();
        row["item"] = "item " + i;
        table.Rows.Add(row);
    }

    table.AcceptChanges();
    return table;
}

private static void PrintValues(DataTable table, string label)
{
    // Display the contents of the supplied DataTable:
    Console.WriteLine(label);
    foreach (DataRow row in table.Rows)
    {
        foreach (DataColumn column in table.Columns)
        {
            Console.Write("\t{0}", row[column]);
        }
        Console.WriteLine();
    }
}

備註

目前 DataTable 及其子代會載入來自所提供 Stream的數據。 這個方法的行為與 方法的行為相同 DataSet.ReadXml ,不同之處在於在此情況下,數據只會針對目前的數據表及其子系載入。

方法 ReadXml 提供一種方式,唯讀取數據,或是從 XML 檔讀取數據和架構 DataTable ,而 ReadXmlSchema 方法則只讀取架構。

請注意, WriteXmlWriteXmlSchema 方法也是如此。 若要從 寫入 XML 數據,或同時 DataTable寫入架構和數據,請使用 WriteXml 方法。 若要只撰寫架構,請使用 WriteXmlSchema 方法。

備註

InvalidOperationException如果要讀取或寫入至 實IDynamicMetaObjectProvider作且未實IXmlSerializable作 的資料行類型,DataRow則會擲回 。

如果指定了內嵌架構,則內嵌架構會用來在載入數據之前擴充現有的關係結構。 例如,如果 (發生任何衝突,則會引發例外狀況) 定義於不同數據類型之相同數據表中的相同數據行。

如果未指定內嵌架構,則根據 XML 檔的結構,關係結構會視需要透過推斷來擴充。 如果架構無法透過推斷來擴充以公開所有數據,則會引發例外狀況。

備註

DataSet在串行化 XML 中逸出 (“_”) 等合法 XML 字元時,不會將 XML 專案與其對應的 DataColumnDataTable 產生關聯。 DataSet本身只會逸出 XML 項目名稱中的不合法 XML 字元,因此只能使用相同的字元。 逸出 XML 項目名稱中的法務字元時,處理時會忽略專案。

另請參閱

適用於

.NET 9 和其他版本
產品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

ReadXml(TextReader)

來源:
DataTable.cs
來源:
DataTable.cs
來源:
DataTable.cs

使用指定的 DataTable,將 XML 結構描述和資料讀入 TextReader

C#
public System.Data.XmlReadMode ReadXml (System.IO.TextReader? reader);
C#
public System.Data.XmlReadMode ReadXml (System.IO.TextReader reader);

參數

reader
TextReader

TextReader,將用來讀取資料。

傳回

XmlReadMode,用來讀取資料。

範例

下列範例會建立包含兩個資料列和十個 DataTable 資料列的 。 此範例會 DataTable 藉由叫 WriteXml 用 方法,將架構和數據寫入記憶體數據流。 此範例會建立第二 DataTable 個 ,並呼叫 ReadXml 方法來填入架構和數據。

C#
private static void DemonstrateReadWriteXMLDocumentWithReader()
{
    DataTable table = CreateTestTable("XmlDemo");
    PrintValues(table, "Original table");

    // Write the schema and data to XML in a memory stream.
    System.IO.MemoryStream xmlStream = new System.IO.MemoryStream();
    table.WriteXml(xmlStream, XmlWriteMode.WriteSchema);

    // Rewind the memory stream.
    xmlStream.Position = 0;

    System.IO.StreamReader reader =
        new System.IO.StreamReader(xmlStream);
    DataTable newTable = new DataTable();
    newTable.ReadXml(reader);

    // Print out values in the table.
    PrintValues(newTable, "New table");
}

private static DataTable CreateTestTable(string tableName)
{
    // Create a test DataTable with two columns and a few rows.
    DataTable table = new DataTable(tableName);
    DataColumn column = new DataColumn("id", typeof(System.Int32));
    column.AutoIncrement = true;
    table.Columns.Add(column);

    column = new DataColumn("item", typeof(System.String));
    table.Columns.Add(column);

    // Add ten rows.
    DataRow row;
    for (int i = 0; i <= 9; i++)
    {
        row = table.NewRow();
        row["item"] = "item " + i;
        table.Rows.Add(row);
    }

    table.AcceptChanges();
    return table;
}

private static void PrintValues(DataTable table, string label)
{
    Console.WriteLine(label);
    foreach (DataRow row in table.Rows)
    {
        foreach (DataColumn column in table.Columns)
        {
            Console.Write("\t{0}", row[column]);
        }
        Console.WriteLine();
    }
}

備註

目前 DataTable 及其子代會載入來自所提供 TextReader的數據。 這個方法的行為與 方法的行為相同 DataSet.ReadXml ,不同之處在於在此情況下,數據只會針對目前的數據表及其子系載入。

方法 ReadXml 提供一種方式,唯讀取數據,或是從 XML 檔讀取數據和架構 DataTable ,而 ReadXmlSchema 方法則只讀取架構。

請注意, WriteXmlWriteXmlSchema 方法也是如此。 若要從 寫入 XML 數據,或同時 DataTable寫入架構和數據,請使用 WriteXml 方法。 若要只撰寫架構,請使用 WriteXmlSchema 方法。

備註

InvalidOperationException如果要讀取或寫入至 實IDynamicMetaObjectProvider作且未實IXmlSerializable作 的資料行類型,DataRow則會擲回 。

如果指定了內嵌架構,則內嵌架構會用來在載入數據之前擴充現有的關係結構。 例如,如果 (發生任何衝突,則會引發例外狀況) 定義於不同數據類型之相同數據表中的相同數據行。

如果未指定內嵌架構,則根據 XML 檔的結構,關係結構會視需要透過推斷來擴充。 如果架構無法透過推斷來擴充以公開所有數據,則會引發例外狀況。

備註

DataSet在串行化 XML 中逸出 (“_”) 等合法 XML 字元時,不會將 XML 專案與其對應的 DataColumnDataTable 產生關聯。 DataSet本身只會逸出 XML 項目名稱中的不合法 XML 字元,因此只能使用相同的字元。 逸出 XML 項目名稱中的法務字元時,處理時會忽略專案。

另請參閱

適用於

.NET 9 和其他版本
產品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

ReadXml(String)

來源:
DataTable.cs
來源:
DataTable.cs
來源:
DataTable.cs

將 XML 結構描述和資料從指定的檔案讀入 DataTable

C#
public System.Data.XmlReadMode ReadXml (string fileName);

參數

fileName
String

要從中讀取資料的檔案名稱。

傳回

XmlReadMode,用來讀取資料。

範例

下列範例會建立包含兩個資料列和十個 DataTable 資料列的 。 此範例會將 DataTable 架構和數據寫入磁碟。 此範例會建立第二 DataTable 個 ,並呼叫 ReadXml 方法來填入架構和數據。

C#
private static void DemonstrateReadWriteXMLDocumentWithString()
{
    DataTable table = CreateTestTable("XmlDemo");
    PrintValues(table, "Original table");

    string fileName = "C:\\TestData.xml";
    table.WriteXml(fileName, XmlWriteMode.WriteSchema);

    DataTable newTable = new DataTable();
    newTable.ReadXml(fileName);

    // Print out values in the table.
    PrintValues(newTable, "New table");
}

private static DataTable CreateTestTable(string tableName)
{
    // Create a test DataTable with two columns and a few rows.
    DataTable table = new DataTable(tableName);
    DataColumn column = new DataColumn("id", typeof(System.Int32));
    column.AutoIncrement = true;
    table.Columns.Add(column);

    column = new DataColumn("item", typeof(System.String));
    table.Columns.Add(column);

    // Add ten rows.
    DataRow row;
    for (int i = 0; i <= 9; i++)
    {
        row = table.NewRow();
        row["item"] = "item " + i;
        table.Rows.Add(row);
    }

    table.AcceptChanges();
    return table;
}

private static void PrintValues(DataTable table, string label)
{
    Console.WriteLine(label);
    foreach (DataRow row in table.Rows)
    {
        foreach (DataColumn column in table.Columns)
        {
            Console.Write("\t{0}", row[column]);
        }
        Console.WriteLine();
    }
}

備註

目前 DataTable 及其子代會從提供的 String中名為的檔案載入數據。 這個方法的行為與 方法的行為相同 DataSet.ReadXml ,不同之處在於在此情況下,數據只會針對目前的數據表及其子系載入。

方法 ReadXml 提供一種方式,唯讀取數據,或是從 XML 檔讀取數據和架構 DataTable ,而 ReadXmlSchema 方法則只讀取架構。

請注意, WriteXmlWriteXmlSchema 方法也是如此。 若要從 寫入 XML 數據,或同時 DataTable寫入架構和數據,請使用 WriteXml 方法。 若要只撰寫架構,請使用 WriteXmlSchema 方法。

備註

InvalidOperationException如果要讀取或寫入至 實IDynamicMetaObjectProvider作且未實IXmlSerializable作 的資料行類型,DataRow則會擲回 。

如果指定了內嵌架構,則內嵌架構會用來在載入數據之前擴充現有的關係結構。 例如,如果 (發生任何衝突,則會引發例外狀況) 定義於不同數據類型之相同數據表中的相同數據行。

如果未指定內嵌架構,則根據 XML 檔的結構,關係結構會視需要透過推斷來擴充。 如果架構無法透過推斷來擴充以公開所有數據,則會引發例外狀況。

備註

DataSet在串行化 XML 中逸出 (“_”) 等合法 XML 字元時,不會將 XML 專案與其對應的 DataColumnDataTable 產生關聯。 DataSet本身只會逸出 XML 項目名稱中的不合法 XML 字元,因此只能使用相同的字元。 逸出 XML 項目名稱中的法務字元時,處理時會忽略專案。

C#
using System.Data;
public class A {
   static void Main(string[] args) {
      DataTable tabl = new DataTable("mytable");
      tabl.Columns.Add(new DataColumn("id", typeof(int)));
      for (int i = 0; i < 10; i++) {
         DataRow row = tabl.NewRow();
         row["id"] = i;
         tabl.Rows.Add(row);
      }
      tabl.WriteXml("f.xml", XmlWriteMode.WriteSchema);
      DataTable newt = new DataTable();
      newt.ReadXml("f.xml");
   }
}

另請參閱

適用於

.NET 9 和其他版本
產品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

ReadXml(XmlReader)

來源:
DataTable.cs
來源:
DataTable.cs
來源:
DataTable.cs

使用指定的 DataTable,將 XML 結構描述和資料讀入 XmlReader

C#
public System.Data.XmlReadMode ReadXml (System.Xml.XmlReader? reader);
C#
public System.Data.XmlReadMode ReadXml (System.Xml.XmlReader reader);

參數

reader
XmlReader

XmlReader,將用來讀取資料。

傳回

XmlReadMode,用來讀取資料。

範例

下列範例會建立包含兩個資料列和十個 DataTable 資料列的 。 這個範例會將 DataTable 架構與資料 XmlReader寫入 。 此範例會建立第二 DataTable 個 ,並呼叫 ReadXml 方法,以從 實例填入架構和數據 XmlReader

C#
private static void DemonstrateReadWriteXMLDocumentWithReader()
{
    DataTable table = CreateTestTable("XmlDemo");
    PrintValues(table, "Original table");

    // Write the schema and data to XML in a memory stream.
    System.IO.MemoryStream xmlStream = new System.IO.MemoryStream();
    table.WriteXml(xmlStream, XmlWriteMode.WriteSchema);

    // Rewind the memory stream.
    xmlStream.Position = 0;

    System.Xml.XmlTextReader reader =
        new System.Xml.XmlTextReader(xmlStream);
    DataTable newTable = new DataTable();
    newTable.ReadXml(reader);

    // Print out values in the table.
    PrintValues(newTable, "New table");
}

private static DataTable CreateTestTable(string tableName)
{
    // Create a test DataTable with two columns and a few rows.
    DataTable table = new DataTable(tableName);
    DataColumn column = new DataColumn("id", typeof(System.Int32));
    column.AutoIncrement = true;
    table.Columns.Add(column);

    column = new DataColumn("item", typeof(System.String));
    table.Columns.Add(column);

    // Add ten rows.
    DataRow row;
    for (int i = 0; i <= 9; i++)
    {
        row = table.NewRow();
        row["item"] = "item " + i;
        table.Rows.Add(row);
    }

    table.AcceptChanges();
    return table;
}

private static void PrintValues(DataTable table, string label)
{
    Console.WriteLine(label);
    foreach (DataRow row in table.Rows)
    {
        foreach (DataColumn column in table.Columns)
        {
            Console.Write("\t{0}", row[column]);
        }
        Console.WriteLine();
    }
}

備註

目前 DataTable 及其子代會從提供的 XmlReader中名為的檔案載入數據。 這個方法的行為與 方法的行為相同 ReadXml ,不同之處在於在此情況下,數據只會針對目前的數據表及其子系載入。

方法 ReadXml 提供一種方式,唯讀取數據,或是從 XML 檔讀取數據和架構 DataTable ,而 ReadXmlSchema 方法則只讀取架構。

請注意, WriteXmlWriteXmlSchema 方法也是如此。 若要從 寫入 XML 數據,或同時 DataTable寫入架構和數據,請使用 WriteXml 方法。 若要只撰寫架構,請使用 WriteXmlSchema 方法。

備註

InvalidOperationException如果要讀取或寫入至 實IDynamicMetaObjectProvider作且未實IXmlSerializable作 的資料行類型,DataRow則會擲回 。

如果指定了內嵌架構,則內嵌架構會用來在載入數據之前擴充現有的關係結構。 例如,如果 (發生任何衝突,則會引發例外狀況) 定義於不同數據類型之相同數據表中的相同數據行。

如果未指定內嵌架構,則根據 XML 檔的結構,關係結構會視需要透過推斷來擴充。 如果架構無法透過推斷來擴充以公開所有數據,則會引發例外狀況。

備註

DataSet在串行化 XML 中逸出 (“_”) 等合法 XML 字元時,不會將 XML 專案與其對應的 DataColumnDataTable 產生關聯。 DataSet本身只會逸出 XML 項目名稱中的不合法 XML 字元,因此只能使用相同的字元。 逸出 XML 項目名稱中的法務字元時,處理時會忽略專案。

另請參閱

適用於

.NET 9 和其他版本
產品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1