DataTable.ReadXml Метод

Определение

Считывает XML-схему и данные в DataTableобъект .

Перегрузки

Имя Описание
ReadXml(Stream)

Считывает XML-схему и данные DataTable в указанный параметр Stream.

ReadXml(TextReader)

Считывает XML-схему и данные DataTable в указанный параметр TextReader.

ReadXml(String)

Считывает XML-схему и данные в указанный DataTable файл.

ReadXml(XmlReader)

Считывает XML-схему и данные DataTable в указанный параметр XmlReader.

Комментарии

Этот ReadXml метод предоставляет способ чтения только данных или как данных, так и схемы DataTable в XML-документе, в то время как ReadXmlSchema метод считывает только схему. Чтобы считывать данные и схему, используйте одну из ReadXML перегрузок, включающих XmlReadMode параметр, и задайте для него значение ReadSchema.

Обратите внимание, что то же самое верно для WriteXml методов и WriteXmlSchema методов соответственно. Для записи XML-данных или схемы и данных из DataTableэтого WriteXml метода используйте этот метод. Чтобы написать только схему WriteXmlSchema , используйте метод.

Note

Вызывается InvalidOperationException , если тип столбца при DataRow чтении или записи для реализации IDynamicMetaObjectProvider и не реализуется IXmlSerializable.

ReadXml(Stream)

Исходный код:
DataTable.cs
Исходный код:
DataTable.cs
Исходный код:
DataTable.cs
Исходный код:
DataTable.cs
Исходный код:
DataTable.cs

Считывает XML-схему и данные DataTable в указанный параметр Stream.

public:
 System::Data::XmlReadMode ReadXml(System::IO::Stream ^ stream);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Members from serialized types may use dynamic code generation.")]
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
public System.Data.XmlReadMode ReadXml(System.IO.Stream? stream);
public System.Data.XmlReadMode ReadXml(System.IO.Stream? stream);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
public System.Data.XmlReadMode ReadXml(System.IO.Stream? stream);
public System.Data.XmlReadMode ReadXml(System.IO.Stream stream);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Members from serialized types may use dynamic code generation.")>]
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")>]
member this.ReadXml : System.IO.Stream -> System.Data.XmlReadMode
member this.ReadXml : System.IO.Stream -> System.Data.XmlReadMode
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")>]
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 метод предоставляет способ чтения только данных или как данных, так и схемы DataTable в XML-документе, в то время как ReadXmlSchema метод считывает только схему.

Обратите внимание, что то же самое верно для WriteXml методов и WriteXmlSchema методов соответственно. Для записи XML-данных или схемы и данных из DataTableэтого WriteXml метода используйте этот метод. Чтобы написать только схему WriteXmlSchema , используйте метод.

Note

Вызывается InvalidOperationException , если тип столбца при DataRow чтении или записи для реализации IDynamicMetaObjectProvider и не реализуется IXmlSerializable.

Если указана встроенная схема, то для расширения существующей реляционной структуры перед загрузкой данных используется встроенная схема. Если возникают конфликты (например, один и тот же столбец в одной таблице, определенной с разными типами данных), возникает исключение.

Если схема в строке не указана, реляционная структура расширяется путем вывода по мере необходимости в соответствии со структурой XML-документа. Если схема не может быть расширена с помощью вывода для предоставления всех данных, возникает исключение.

Note

Элемент DataSet XML не связывается с соответствующим DataColumn или DataTable когда юридические XML-символы, такие как ("_"), экранируются в сериализованном XML. Сам DataSet по себе экранирует только недопустимые XML-символы в именах ЭЛЕМЕНТОВ XML, поэтому может использовать только те же. При экранировании юридических символов в имени XML-элемента элемент игнорируется во время обработки.

См. также раздел

Применяется к

ReadXml(TextReader)

Исходный код:
DataTable.cs
Исходный код:
DataTable.cs
Исходный код:
DataTable.cs
Исходный код:
DataTable.cs
Исходный код:
DataTable.cs

Считывает XML-схему и данные DataTable в указанный параметр TextReader.

public:
 System::Data::XmlReadMode ReadXml(System::IO::TextReader ^ reader);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Members from serialized types may use dynamic code generation.")]
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
public System.Data.XmlReadMode ReadXml(System.IO.TextReader? reader);
public System.Data.XmlReadMode ReadXml(System.IO.TextReader? reader);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
public System.Data.XmlReadMode ReadXml(System.IO.TextReader? reader);
public System.Data.XmlReadMode ReadXml(System.IO.TextReader reader);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Members from serialized types may use dynamic code generation.")>]
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")>]
member this.ReadXml : System.IO.TextReader -> System.Data.XmlReadMode
member this.ReadXml : System.IO.TextReader -> System.Data.XmlReadMode
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")>]
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 метод предоставляет способ чтения только данных или как данных, так и схемы DataTable в XML-документе, в то время как ReadXmlSchema метод считывает только схему.

Обратите внимание, что то же самое верно для WriteXml методов и WriteXmlSchema методов соответственно. Для записи XML-данных или схемы и данных из DataTableэтого WriteXml метода используйте этот метод. Чтобы написать только схему WriteXmlSchema , используйте метод.

Note

Вызывается InvalidOperationException , если тип столбца при DataRow чтении или записи для реализации IDynamicMetaObjectProvider и не реализуется IXmlSerializable.

Если указана встроенная схема, то для расширения существующей реляционной структуры перед загрузкой данных используется встроенная схема. Если возникают конфликты (например, один и тот же столбец в одной таблице, определенной с разными типами данных), возникает исключение.

Если схема в строке не указана, реляционная структура расширяется путем вывода по мере необходимости в соответствии со структурой XML-документа. Если схема не может быть расширена с помощью вывода для предоставления всех данных, возникает исключение.

Note

Элемент DataSet XML не связывается с соответствующим DataColumn или DataTable когда юридические XML-символы, такие как ("_"), экранируются в сериализованном XML. Сам DataSet по себе экранирует только недопустимые XML-символы в именах ЭЛЕМЕНТОВ XML, поэтому может использовать только те же. При экранировании юридических символов в имени XML-элемента элемент игнорируется во время обработки.

См. также раздел

Применяется к

ReadXml(String)

Исходный код:
DataTable.cs
Исходный код:
DataTable.cs
Исходный код:
DataTable.cs
Исходный код:
DataTable.cs
Исходный код:
DataTable.cs

Считывает XML-схему и данные в указанный DataTable файл.

public:
 System::Data::XmlReadMode ReadXml(System::String ^ fileName);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Members from serialized types may use dynamic code generation.")]
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
public System.Data.XmlReadMode ReadXml(string fileName);
public System.Data.XmlReadMode ReadXml(string fileName);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
public System.Data.XmlReadMode ReadXml(string fileName);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Members from serialized types may use dynamic code generation.")>]
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")>]
member this.ReadXml : string -> System.Data.XmlReadMode
member this.ReadXml : string -> System.Data.XmlReadMode
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")>]
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 метод предоставляет способ чтения только данных или как данных, так и схемы DataTable в XML-документе, в то время как ReadXmlSchema метод считывает только схему.

Обратите внимание, что то же самое верно для WriteXml методов и WriteXmlSchema методов соответственно. Для записи XML-данных или схемы и данных из DataTableэтого WriteXml метода используйте этот метод. Чтобы написать только схему WriteXmlSchema , используйте метод.

Note

Вызывается InvalidOperationException , если тип столбца при DataRow чтении или записи для реализации IDynamicMetaObjectProvider и не реализуется IXmlSerializable.

Если указана встроенная схема, то для расширения существующей реляционной структуры перед загрузкой данных используется встроенная схема. Если возникают конфликты (например, один и тот же столбец в одной таблице, определенной с разными типами данных), возникает исключение.

Если схема в строке не указана, реляционная структура расширяется путем вывода по мере необходимости в соответствии со структурой XML-документа. Если схема не может быть расширена с помощью вывода для предоставления всех данных, возникает исключение.

Note

Элемент DataSet XML не связывается с соответствующим DataColumn или DataTable когда юридические XML-символы, такие как ("_"), экранируются в сериализованном XML. Сам 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.cs
Исходный код:
DataTable.cs

Считывает XML-схему и данные DataTable в указанный параметр XmlReader.

public:
 System::Data::XmlReadMode ReadXml(System::Xml::XmlReader ^ reader);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Members from serialized types may use dynamic code generation.")]
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
public System.Data.XmlReadMode ReadXml(System.Xml.XmlReader? reader);
public System.Data.XmlReadMode ReadXml(System.Xml.XmlReader? reader);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
public System.Data.XmlReadMode ReadXml(System.Xml.XmlReader? reader);
public System.Data.XmlReadMode ReadXml(System.Xml.XmlReader reader);
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Members from serialized types may use dynamic code generation.")>]
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")>]
member this.ReadXml : System.Xml.XmlReader -> System.Data.XmlReadMode
member this.ReadXml : System.Xml.XmlReader -> System.Data.XmlReadMode
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")>]
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 метод предоставляет способ чтения только данных или как данных, так и схемы DataTable в XML-документе, в то время как ReadXmlSchema метод считывает только схему.

Обратите внимание, что то же самое верно для WriteXml методов и WriteXmlSchema методов соответственно. Для записи XML-данных или схемы и данных из DataTableэтого WriteXml метода используйте этот метод. Чтобы написать только схему WriteXmlSchema , используйте метод.

Note

Вызывается InvalidOperationException , если тип столбца при DataRow чтении или записи для реализации IDynamicMetaObjectProvider и не реализуется IXmlSerializable.

Если указана встроенная схема, то для расширения существующей реляционной структуры перед загрузкой данных используется встроенная схема. Если возникают конфликты (например, один и тот же столбец в одной таблице, определенной с разными типами данных), возникает исключение.

Если схема в строке не указана, реляционная структура расширяется путем вывода по мере необходимости в соответствии со структурой XML-документа. Если схема не может быть расширена с помощью вывода для предоставления всех данных, возникает исключение.

Note

Элемент DataSet XML не связывается с соответствующим DataColumn или DataTable когда юридические XML-символы, такие как ("_"), экранируются в сериализованном XML. Сам DataSet по себе экранирует только недопустимые XML-символы в именах ЭЛЕМЕНТОВ XML, поэтому может использовать только те же. При экранировании юридических символов в имени XML-элемента элемент игнорируется во время обработки.

См. также раздел

Применяется к