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,將 XML 結構描述和資料讀入 Stream

public:
 System::Data::XmlReadMode ReadXml(System::IO::Stream ^ stream);
public System.Data.XmlReadMode ReadXml (System.IO.Stream? stream);
public System.Data.XmlReadMode ReadXml (System.IO.Stream stream);
member this.ReadXml : System.IO.Stream -> System.Data.XmlReadMode
Public Function ReadXml (stream As Stream) As XmlReadMode

參數

stream
Stream

衍生自 Stream 的物件。

傳回

XmlReadMode

XmlReadMode,用來讀取資料。

範例

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

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();
    }
}
Private Sub DemonstrateReadWriteXMLDocumentWithStream()
  Dim table As DataTable = CreateTestTable("XmlDemo")
  PrintValues(table, "Original table")

  ' Write the schema and data to XML in a memory stream.
  Dim xmlStream As New System.IO.MemoryStream()
  table.WriteXml(xmlStream, XmlWriteMode.WriteSchema)

  ' Rewind the memory stream.
  xmlStream.Position = 0

  Dim newTable As New DataTable
  newTable.ReadXml(xmlStream)

  ' Print out values in the table.
  PrintValues(newTable, "New Table")
End Sub

Private Function CreateTestTable(ByVal tableName As String) As DataTable
  ' Create a test DataTable with two columns and a few rows.
  Dim table As New DataTable(tableName)
  Dim column As New DataColumn("id", GetType(System.Int32))
  column.AutoIncrement = True
  table.Columns.Add(column)

  column = New DataColumn("item", GetType(System.String))
  table.Columns.Add(column)

  ' Add ten rows.
  Dim row As DataRow
  For i As Integer = 0 To 9
    row = table.NewRow()
    row("item") = "item " & i
    table.Rows.Add(row)
  Next i

  table.AcceptChanges()
  Return table
End Function

Private Sub PrintValues(ByVal table As DataTable, ByVal label As String)
  ' Display the contents of the supplied DataTable:
  Console.WriteLine(label)
  For Each row As DataRow In table.Rows
    For Each column As DataColumn In table.Columns
      Console.Write("{0}{1}", ControlChars.Tab, row(column))
    Next column
    Console.WriteLine()
  Next row
End Sub

備註

目前 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 專案名稱中的法務字元時,處理時會忽略專案。

另請參閱

適用於

ReadXml(TextReader)

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

public:
 System::Data::XmlReadMode ReadXml(System::IO::TextReader ^ reader);
public System.Data.XmlReadMode ReadXml (System.IO.TextReader? reader);
public System.Data.XmlReadMode ReadXml (System.IO.TextReader reader);
member this.ReadXml : System.IO.TextReader -> System.Data.XmlReadMode
Public Function ReadXml (reader As TextReader) As XmlReadMode

參數

reader
TextReader

TextReader,將用來讀取資料。

傳回

XmlReadMode

XmlReadMode,用來讀取資料。

範例

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

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();
    }
}
Private Sub DemonstrateReadWriteXMLDocumentWithReader()
  Dim table As DataTable = CreateTestTable("XmlDemo")
  PrintValues(table, "Original table")

  ' Write the schema and data to XML in a memory stream.
  Dim xmlStream As New System.IO.MemoryStream()
  table.WriteXml(xmlStream, XmlWriteMode.WriteSchema)

  ' Rewind the memory stream.
  xmlStream.Position = 0

  Dim reader As New System.IO.StreamReader(xmlStream)
  Dim newTable As New DataTable
  newTable.ReadXml(reader)

  ' Print out values in the table.
  PrintValues(newTable, "New Table")
End Sub

Private Function CreateTestTable(ByVal tableName As String) _
  As DataTable
  ' Create a test DataTable with two columns and a few rows.
  Dim table As New DataTable(tableName)
  Dim column As New DataColumn("id", GetType(System.Int32))
  column.AutoIncrement = True
  table.Columns.Add(column)

  column = New DataColumn("item", GetType(System.String))
  table.Columns.Add(column)

  ' Add ten rows.
  Dim row As DataRow
  For i As Integer = 0 To 9
    row = table.NewRow()
    row("item") = "item " & i
    table.Rows.Add(row)
  Next i

  table.AcceptChanges()
  Return table
End Function

Private Sub PrintValues(ByVal table As DataTable, _
  ByVal label As String)
  Console.WriteLine(label)
  For Each row As DataRow In table.Rows
    For Each column As DataColumn In table.Columns
      Console.Write("{0}{1}", ControlChars.Tab, row(column))
    Next column
    Console.WriteLine()
  Next row
End Sub

備註

目前 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 專案名稱中的法務字元時,處理時會忽略專案。

另請參閱

適用於

ReadXml(String)

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

public:
 System::Data::XmlReadMode ReadXml(System::String ^ fileName);
public System.Data.XmlReadMode ReadXml (string fileName);
member this.ReadXml : string -> System.Data.XmlReadMode
Public Function ReadXml (fileName As String) As XmlReadMode

參數

fileName
String

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

傳回

XmlReadMode

XmlReadMode,用來讀取資料。

範例

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

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();
    }
}
Private Sub DemonstrateReadWriteXMLDocumentWithString()
  Dim table As DataTable = CreateTestTable("XmlDemo")
  PrintValues(table, "Original table")

  ' Write the schema and data to XML in a file.
  Dim fileName As String = "C:\TestData.xml"
  table.WriteXml(fileName, XmlWriteMode.WriteSchema)

  Dim newTable As New DataTable
  newTable.ReadXml(fileName)

  ' Print out values in the table.
  PrintValues(newTable, "New Table")
End Sub

Private Function CreateTestTable(ByVal tableName As String) _
  As DataTable

  ' Create a test DataTable with two columns and a few rows.
  Dim table As New DataTable(tableName)
  Dim column As New DataColumn("id", GetType(System.Int32))
  column.AutoIncrement = True
  table.Columns.Add(column)

  column = New DataColumn("item", GetType(System.String))
  table.Columns.Add(column)

  ' Add ten rows.
  Dim row As DataRow
  For i As Integer = 0 To 9
    row = table.NewRow()
    row("item") = "item " & i
    table.Rows.Add(row)
  Next i

  table.AcceptChanges()
  Return table
End Function

Private Sub PrintValues(ByVal table As DataTable, _
  ByVal label As String)
  Console.WriteLine(label)
  For Each row As DataRow In table.Rows
    For Each column As DataColumn In table.Columns
      Console.Write("{0}{1}", ControlChars.Tab, row(column))
    Next column
    Console.WriteLine()
  Next row
End Sub

備註

目前 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 專案名稱中的法務字元時,處理時會忽略專案。

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");  
   }  
}  

另請參閱

適用於

ReadXml(XmlReader)

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

public:
 System::Data::XmlReadMode ReadXml(System::Xml::XmlReader ^ reader);
public System.Data.XmlReadMode ReadXml (System.Xml.XmlReader? reader);
public System.Data.XmlReadMode ReadXml (System.Xml.XmlReader reader);
member this.ReadXml : System.Xml.XmlReader -> System.Data.XmlReadMode
Public Function ReadXml (reader As XmlReader) As XmlReadMode

參數

reader
XmlReader

XmlReader,將用來讀取資料。

傳回

XmlReadMode

XmlReadMode,用來讀取資料。

範例

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

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();
    }
}
Private Sub DemonstrateReadWriteXMLDocumentWithReader()
  Dim table As DataTable = CreateTestTable("XmlDemo")
  PrintValues(table, "Original table")

  ' Write the schema and data to XML in a memory stream.
  Dim xmlStream As New System.IO.MemoryStream()
  table.WriteXml(xmlStream, XmlWriteMode.WriteSchema)

  ' Rewind the memory stream.
  xmlStream.Position = 0

  Dim reader As New System.Xml.XmlTextReader(xmlStream)
  Dim newTable As New DataTable
  newTable.ReadXml(reader)

  ' Print out values in the table.
  PrintValues(newTable, "New Table")
End Sub

Private Function CreateTestTable(ByVal tableName As String) _
  As DataTable
  ' Create a test DataTable with two columns and a few rows.
  Dim table As New DataTable(tableName)
  Dim column As New DataColumn("id", GetType(System.Int32))
  column.AutoIncrement = True
  table.Columns.Add(column)

  column = New DataColumn("item", GetType(System.String))
  table.Columns.Add(column)

  ' Add ten rows.
  Dim row As DataRow
  For i As Integer = 0 To 9
    row = table.NewRow()
    row("item") = "item " & i
    table.Rows.Add(row)
  Next i

  table.AcceptChanges()
  Return table
End Function

Private Sub PrintValues(ByVal table As DataTable, _
  ByVal label As String)
  Console.WriteLine(label)
  For Each row As DataRow In table.Rows
    For Each column As DataColumn In table.Columns
      Console.Write("{0}{1}", ControlChars.Tab, row(column))
    Next column
    Console.WriteLine()
  Next row
End Sub

備註

目前 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 專案名稱中的法務字元時,處理時會忽略專案。

另請參閱

適用於