DataTable.ReadXml メソッド

定義

XML スキーマとデータを DataTableに読み取ります。

オーバーロード

名前 説明
ReadXml(Stream)

指定したStreamを使用して、XML スキーマとデータをDataTableに読み取ります。

ReadXml(TextReader)

指定したTextReaderを使用して、XML スキーマとデータをDataTableに読み取ります。

ReadXml(String)

指定したファイルから XML スキーマとデータを DataTable に読み取ります。

ReadXml(XmlReader)

指定したXmlReaderを使用して、XML スキーマとデータをDataTableに読み取ります。

注釈

ReadXml メソッドは、データのみ、またはデータとスキーマの両方を XML ドキュメントからDataTableに読み取る方法を提供しますが、ReadXmlSchema メソッドはスキーマのみを読み取ります。 データとスキーマの両方を読み取るために、XmlReadMode パラメーターを含むReadXMLオーバーロードのいずれかを使用し、その値を ReadSchema に設定します。

WriteXmlメソッドとWriteXmlSchemaメソッドについても、それぞれ同じことが当てはまります。 XML データ、またはスキーマとデータの両方を DataTableから書き込むには、 WriteXml メソッドを使用します。 スキーマのみを記述するには、 WriteXmlSchema メソッドを使用します。

Note

InvalidOperationExceptionは、IDynamicMetaObjectProviderを実装するために読み取りまたは書き込みを行うDataRow内の列型がIXmlSerializableを実装していない場合にスローされます。

ReadXml(Stream)

指定したStreamを使用して、XML スキーマとデータをDataTableに読み取ります。

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データの読み取りに使用されます。

次の例では、2 つの列と 10 行を含む DataTable を作成します。 この例では、WriteXml メソッドを呼び出して、DataTable スキーマとデータをメモリ ストリームに書き込みます。 この例では、2 つ目の 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 メソッドはスキーマのみを読み取ります。

WriteXmlメソッドとWriteXmlSchemaメソッドについても、それぞれ同じことが当てはまります。 XML データ、またはスキーマとデータの両方を DataTableから書き込むには、 WriteXml メソッドを使用します。 スキーマのみを記述するには、 WriteXmlSchema メソッドを使用します。

Note

InvalidOperationExceptionは、IDynamicMetaObjectProviderを実装するために読み取りまたは書き込みを行うDataRow内の列型がIXmlSerializableを実装していない場合にスローされます。

インライン スキーマが指定されている場合、インライン スキーマは、データを読み込む前に既存のリレーショナル構造を拡張するために使用されます。 競合がある場合 (たとえば、異なるデータ型で定義されている同じテーブル内の同じ列)、例外が発生します。

インライン スキーマが指定されていない場合、リレーショナル構造は、XML ドキュメントの構造に従って、必要に応じて推論によって拡張されます。 すべてのデータを公開するために、推論によってスキーマを拡張できない場合は、例外が発生します。

Note

シリアル化された XML で有効な XML 文字 ("_") がエスケープされている場合、 DataSet は XML 要素を対応する DataColumn または DataTable に関連付けません。 DataSet自体は、XML 要素名内の無効な XML 文字のみをエスケープするため、同じもののみを使用できます。 XML 要素名の有効な文字をエスケープすると、処理中に要素は無視されます。

こちらもご覧ください

適用対象

ReadXml(TextReader)

指定したTextReaderを使用して、XML スキーマとデータをDataTableに読み取ります。

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データの読み取りに使用されます。

次の例では、2 つの列と 10 行を含む DataTable を作成します。 この例では、WriteXml メソッドを呼び出して、DataTable スキーマとデータをメモリ ストリームに書き込みます。 この例では、2 つ目の 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 メソッドはスキーマのみを読み取ります。

WriteXmlメソッドとWriteXmlSchemaメソッドについても、それぞれ同じことが当てはまります。 XML データ、またはスキーマとデータの両方を DataTableから書き込むには、 WriteXml メソッドを使用します。 スキーマのみを記述するには、 WriteXmlSchema メソッドを使用します。

Note

InvalidOperationExceptionは、IDynamicMetaObjectProviderを実装するために読み取りまたは書き込みを行うDataRow内の列型がIXmlSerializableを実装していない場合にスローされます。

インライン スキーマが指定されている場合、インライン スキーマは、データを読み込む前に既存のリレーショナル構造を拡張するために使用されます。 競合がある場合 (たとえば、異なるデータ型で定義されている同じテーブル内の同じ列)、例外が発生します。

インライン スキーマが指定されていない場合、リレーショナル構造は、XML ドキュメントの構造に従って、必要に応じて推論によって拡張されます。 すべてのデータを公開するために、推論によってスキーマを拡張できない場合は、例外が発生します。

Note

シリアル化された XML で有効な XML 文字 ("_") がエスケープされている場合、 DataSet は XML 要素を対応する DataColumn または DataTable に関連付けません。 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データの読み取りに使用されます。

次の例では、2 つの列と 10 行を含む DataTable を作成します。 この例では、 DataTable スキーマとデータをディスクに書き込みます。 この例では、2 つ目の 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 メソッドはスキーマのみを読み取ります。

WriteXmlメソッドとWriteXmlSchemaメソッドについても、それぞれ同じことが当てはまります。 XML データ、またはスキーマとデータの両方を DataTableから書き込むには、 WriteXml メソッドを使用します。 スキーマのみを記述するには、 WriteXmlSchema メソッドを使用します。

Note

InvalidOperationExceptionは、IDynamicMetaObjectProviderを実装するために読み取りまたは書き込みを行うDataRow内の列型がIXmlSerializableを実装していない場合にスローされます。

インライン スキーマが指定されている場合、インライン スキーマは、データを読み込む前に既存のリレーショナル構造を拡張するために使用されます。 競合がある場合 (たとえば、異なるデータ型で定義されている同じテーブル内の同じ列)、例外が発生します。

インライン スキーマが指定されていない場合、リレーショナル構造は、XML ドキュメントの構造に従って、必要に応じて推論によって拡張されます。 すべてのデータを公開するために、推論によってスキーマを拡張できない場合は、例外が発生します。

Note

シリアル化された XML で有効な XML 文字 ("_") がエスケープされている場合、 DataSet は XML 要素を対応する DataColumn または DataTable に関連付けません。 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)

指定したXmlReaderを使用して、XML スキーマとデータをDataTableに読み取ります。

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データの読み取りに使用されます。

次の例では、2 つの列と 10 行を含む DataTable を作成します。 この例では、 DataTable スキーマとデータを XmlReaderに書き込みます。 この例では、2 つ目の 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 メソッドはスキーマのみを読み取ります。

WriteXmlメソッドとWriteXmlSchemaメソッドについても、それぞれ同じことが当てはまります。 XML データ、またはスキーマとデータの両方を DataTableから書き込むには、 WriteXml メソッドを使用します。 スキーマのみを記述するには、 WriteXmlSchema メソッドを使用します。

Note

InvalidOperationExceptionは、IDynamicMetaObjectProviderを実装するために読み取りまたは書き込みを行うDataRow内の列型がIXmlSerializableを実装していない場合にスローされます。

インライン スキーマが指定されている場合、インライン スキーマは、データを読み込む前に既存のリレーショナル構造を拡張するために使用されます。 競合がある場合 (たとえば、異なるデータ型で定義されている同じテーブル内の同じ列)、例外が発生します。

インライン スキーマが指定されていない場合、リレーショナル構造は、XML ドキュメントの構造に従って、必要に応じて推論によって拡張されます。 すべてのデータを公開するために、推論によってスキーマを拡張できない場合は、例外が発生します。

Note

シリアル化された XML で有効な XML 文字 ("_") がエスケープされている場合、 DataSet は XML 要素を対応する DataColumn または DataTable に関連付けません。 DataSet自体は、XML 要素名内の無効な XML 文字のみをエスケープするため、同じもののみを使用できます。 XML 要素名の有効な文字をエスケープすると、処理中に要素は無視されます。

こちらもご覧ください

適用対象