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

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,用來讀取資料。

範例

下列範例會建立包含兩個資料列和十個 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.cs
來源:
DataTable.cs
來源:
DataTable.cs

使用指定的 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,用來讀取資料。

範例

下列範例會建立包含兩個資料列和十個 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)

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

將 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,用來讀取資料。

範例

下列範例會建立包含兩個資料列和十個 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.cs
來源:
DataTable.cs
來源:
DataTable.cs

使用指定的 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,用來讀取資料。

範例

下列範例會建立包含兩個資料列和十個 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 項目名稱中的法務字元時,處理時會忽略專案。

另請參閱

適用於