次の方法で共有


DataSet.ReadXml メソッド (String)

指定したファイルを使用して、XML スキーマとデータを DataSet に読み込みます。

Overloads Public Function ReadXml( _
   ByVal fileName As String _) As XmlReadMode
[C#]
public XmlReadMode ReadXml(stringfileName);
[C++]
public: XmlReadMode ReadXml(String* fileName);
[JScript]
public function ReadXml(
   fileName : String) : XmlReadMode;

パラメータ

  • fileName
    読み込み元の (パスを含む) ファイル名。

戻り値

データを読み込むために使用する XmlReadMode

例外

例外の種類 条件
SecurityException FileIOPermissionRead に設定されていません。

解説

ReadXml メソッドを使用すると、XML ドキュメントから DataSet に、データだけ、またはデータとスキーマの両方を読み込むことができます。これに対して ReadXmlSchema メソッドは、スキーマだけを読み込みます。データとスキーマの両方を読み取るには、 XmlReadMode パラメータを含む ReadXML オーバーロードの 1 つを使用し、その値を ReadSchema に設定します。

WriteXml メソッドと WriteXmlSchema メソッドについても、それぞれ同様です。XML データ、またはスキーマとデータの両方を DataSet から書き込むには、 WriteXml メソッドを使用します。スキーマだけを書き込むには、 WriteXmlSchema メソッドを使用します。

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

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

DataSet の XSD スキーマに targetNamespace が含まれている場合、データを読み取ることができない可能性があります。また、 ReadXml を呼び出して、名前空間の限定がない要素を含む XML で DataSet を読み込むと、例外が発生する可能性があります。限定されていない要素を読み取るには、次の例のように、XSD スキーマで elementFormDefault を "qualified" に設定します。

<xsd:schema id="MyDataSet" 
   elementFormDefault="qualified" 
   targetNamespace="http://www.tempuri.org/MyDataSet.xsd" 
   xmlns="http://www.tempuri.org/MyDataSet.xsd" 
   xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
   xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
</xsd:schema>

メモ    DataSet のスキーマに、同じ名前空間で名前が同じであるが型が違う要素が含まれている場合、 XmlReadMode.ReadSchema を指定してスキーマを ReadXmlDataSet に読み込もうとすると、例外がスローされます。この例外は、.NET Framework Version 1.0 を使用している場合は発生しません。

.NET Compact Framework - Windows CE .NET プラットフォームに関する注意点: file:// URI 方式を使用する場合、相対パスはサポートされません。絶対パス情報を指定してください。

.NET Compact Framework - Windows CE .NET プラットフォームに関する注意点: file:// URI 方式を使用する場合、相対パスはサポートされません。絶対パス情報を指定してください。

使用例

[Visual Basic, C#, C++] 初めに 1 つの DataTable 、2 列、および 10 行で単純な DataSet を作成する例を次に示します。 DataSet のスキーマとデータは、 WriteXml メソッドの呼び出しによってディスクに書き込みます。2 番目の DataSet を作成し、 ReadXml メソッドを使用して、スキーマとデータを格納します。

 
Private Sub DemonstrateReadWriteXMLDocumentWithStreamReader()
    ' Create a DataSet with one table and two columns.
    Dim OriginalDataSet As New DataSet("myDataSet")
    OriginalDataSet.Namespace = "NetFrameWork"
    Dim myTable As New DataTable("myTable")
    Dim c1 As New DataColumn("id", Type.GetType("System.Int32"))
    c1.AutoIncrement = True
    Dim c2 As New DataColumn("item")
    myTable.Columns.Add(c1)
    myTable.Columns.Add(c2)
    OriginalDataSet.Tables.Add(myTable)
    ' Add ten rows.
    Dim newRow As DataRow
    Dim i As Integer
    For i = 0 To 9
        newRow = myTable.NewRow()
        newRow("item") = "item " + i.ToString()
        myTable.Rows.Add(newRow)
    Next i
    OriginalDataSet.AcceptChanges()
    ' Print out values of each table in the DataSet using the 
    ' function defined below.
    PrintValues(OriginalDataSet, "Original DataSet")
    ' Write the schema and data to an XML file.
    Dim xmlFilename As String = "myXmlDocument.xml"
    ' Use WriteXml to write the document.
    OriginalDataSet.WriteXml(xmlFilename)
    ' Dispose of the original DataSet.
    OriginalDataSet.Dispose()
    ' Create a new DataSet.
    Dim newDataSet As New DataSet("New DataSet")
    ' Read the XML document into the DataSet.
    newDataSet.ReadXml(xmlFilename)
    ' Print out values of each table in the DataSet using the 
    ' function defined below.
    PrintValues(newDataSet, "New DataSet")
End Sub
   
   
Private Sub PrintValues(ds As DataSet, label As String)
    Console.WriteLine(ControlChars.Cr + label)
    Dim t As DataTable
    For Each t In  ds.Tables
        Console.WriteLine("TableName: " + t.TableName)
        Dim r As DataRow
        For Each r In  t.Rows
            Dim c As DataColumn
            For Each c In  t.Columns
                Console.Write(ControlChars.Tab + " " + r(c).ToString())
            Next c
            Console.WriteLine()
        Next r
    Next t
End Sub

[C#] 
private void DemonstrateReadWriteXMLDocumentWithStreamReader(){
   // Create a DataSet with one table and two columns.
   DataSet OriginalDataSet = new DataSet("myDataSet");
    OriginalDataSet.Namespace= "NetFrameWork";
   DataTable myTable = new DataTable("myTable");
   DataColumn c1 = new DataColumn("id", Type.GetType("System.Int32"));
   c1.AutoIncrement= true;
   DataColumn c2 = new DataColumn("item");
   myTable.Columns.Add(c1);
   myTable.Columns.Add(c2);
   OriginalDataSet.Tables.Add(myTable);
   // Add ten rows.
   DataRow newRow;
   for(int i = 0; i < 10; i++){
      newRow = myTable.NewRow();
      newRow["item"]= "item " + i;
      myTable.Rows.Add(newRow);
   }
   OriginalDataSet.AcceptChanges();
   // Print out values of each table in the DataSet using the 
   // function defined below.
   PrintValues(OriginalDataSet, "Original DataSet");
   // Write the schema and data to an XML file.
   string xmlFilename = "myXmlDocument.xml";
   // Use WriteXml to write the document.
   OriginalDataSet.WriteXml(xmlFilename);
   // Dispose of the original DataSet.
   OriginalDataSet.Dispose();
   // Create a new DataSet.
   DataSet newDataSet = new DataSet("New DataSet");
   // Read the XML document into the DataSet.
   newDataSet.ReadXml(xmlFilename);
   // Print out values of each table in the DataSet using the 
   // function defined below.
   PrintValues(newDataSet,"New DataSet");
}

private void PrintValues(DataSet ds, string label){
   Console.WriteLine("\n" + label);
   foreach(DataTable t in ds.Tables){
      Console.WriteLine("TableName: " + t.TableName);
      foreach(DataRow r in t.Rows){
         foreach(DataColumn c in t.Columns){
            Console.Write("\t " + r[c] );
         }
         Console.WriteLine();
      }
   }
}

[C++] 
private:
 void DemonstrateReadWriteXMLDocumentWithStreamReader(){
    // Create a DataSet with one table and two columns.
    DataSet* OriginalDataSet = new DataSet(S"myDataSet");
     OriginalDataSet->Namespace= S"NetFrameWork";
    DataTable* myTable = new DataTable(S"myTable");
    DataColumn* c1 = new DataColumn(S"id", Type::GetType(S"System.Int32"));
    c1->AutoIncrement= true;
    DataColumn* c2 = new DataColumn(S"item");
    myTable->Columns->Add(c1);
    myTable->Columns->Add(c2);
    OriginalDataSet->Tables->Add(myTable);
    // Add ten rows.
    DataRow* newRow;
    for(int i = 0; i < 10; i++){
       newRow = myTable->NewRow();
       newRow->Item[S"item"]= String::Format( S"item {0}", __box(i));
       myTable->Rows->Add(newRow);
    }
    OriginalDataSet->AcceptChanges();
    // Print out values of each table in the DataSet using the 
    // function defined below.
    PrintValues(OriginalDataSet, S"Original DataSet");
    // Write the schema and data to an XML file.
    String* xmlFilename = S"myXmlDocument.xml";
    // Use WriteXml to write the document.
    OriginalDataSet->WriteXml(xmlFilename);
    // Dispose of the original DataSet.
    OriginalDataSet->Dispose();
    // Create a new DataSet.
    DataSet* newDataSet = new DataSet(S"New DataSet");
    // Read the XML document into the DataSet.
    newDataSet->ReadXml(xmlFilename);
    // Print out values of each table in the DataSet using the 
    // function defined below.
    PrintValues(newDataSet,S"New DataSet");
 }
 
 void PrintValues(DataSet* ds, String* label){
    Console::WriteLine(S"\n{0}", label);
    System::Collections::IEnumerator* myEnum = ds->Tables->GetEnumerator();
    while (myEnum->MoveNext())
    {
       DataTable* t = __try_cast<DataTable*>(myEnum->Current);
       Console::WriteLine(S"TableName: {0}", t->TableName);
       System::Collections::IEnumerator* myEnum1 = t->Rows->GetEnumerator();
       while (myEnum1->MoveNext())
       {
          DataRow* r = __try_cast<DataRow*>(myEnum1->Current);
          System::Collections::IEnumerator* myEnum2 = t->Columns->GetEnumerator();
          while (myEnum2->MoveNext())
          {
             DataColumn* c = __try_cast<DataColumn*>(myEnum2->Current);
             Console::Write(S"\t {0}", r->Item[c] );
          }
          Console::WriteLine();
       }
    }
 }

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

.NET Framework セキュリティ:

参照

DataSet クラス | DataSet メンバ | System.Data 名前空間 | DataSet.ReadXml オーバーロードの一覧 | ReadXml | ReadXmlSchema | WriteXml | WriteXmlSchema