DataTable.ReadXml 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將 XML 結構描述和資料讀入 DataTable。
多載
ReadXml(Stream) | |
ReadXml(TextReader) |
使用指定的 DataTable,將 XML 結構描述和資料讀入 TextReader。 |
ReadXml(String) |
將 XML 結構描述和資料從指定的檔案讀入 DataTable。 |
ReadXml(XmlReader) |
備註
方法 ReadXml 提供一種方式,唯讀取數據,或是從 XML 檔讀取數據和架構 DataTable ,而 ReadXmlSchema 方法則只讀取架構。 若要讀取資料和架構,請使用包含 XmlReadMode
參數的其中ReadXML
一個多載,並將其值設定為 ReadSchema
。
請注意, WriteXml 和 WriteXmlSchema 方法也是如此。 若要從 寫入 XML 數據,或同時 DataTable
寫入架構和數據,請使用 WriteXml
方法。 若要只撰寫架構,請使用 WriteXmlSchema
方法。
注意
InvalidOperationException如果要讀取或寫入至 實IDynamicMetaObjectProvider作且未實IXmlSerializable作 的資料行類型,DataRow
則會擲回 。
ReadXml(Stream)
- 來源:
- DataTable.cs
- 來源:
- DataTable.cs
- 來源:
- DataTable.cs
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
參數
傳回
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 方法則只讀取架構。
請注意, WriteXml 和 WriteXmlSchema 方法也是如此。 若要從 寫入 XML 數據,或同時 DataTable
寫入架構和數據,請使用 WriteXml
方法。 若要只撰寫架構,請使用 WriteXmlSchema
方法。
注意
InvalidOperationException如果要讀取或寫入至 實IDynamicMetaObjectProvider作且未實IXmlSerializable作 的資料行類型,DataRow
則會擲回 。
如果指定了內嵌架構,則內嵌架構會用來在載入數據之前擴充現有的關係結構。 例如,如果 (發生任何衝突,則會引發例外狀況) 定義於不同數據類型之相同數據表中的相同數據行。
如果未指定內嵌架構,則根據 XML 檔的結構,關係結構會視需要透過推斷來擴充。 如果架構無法透過推斷來擴充以公開所有數據,則會引發例外狀況。
注意
DataSet
在串行化 XML 中逸出 (“_”) 等合法 XML 字元時,不會將 XML 專案與其對應的 DataColumn
或 DataTable
產生關聯。 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 方法則只讀取架構。
請注意, WriteXml 和 WriteXmlSchema 方法也是如此。 若要從 寫入 XML 數據,或同時 DataTable
寫入架構和數據,請使用 WriteXml
方法。 若要只撰寫架構,請使用 WriteXmlSchema
方法。
注意
InvalidOperationException如果要讀取或寫入至 實IDynamicMetaObjectProvider作且未實IXmlSerializable作 的資料行類型,DataRow
則會擲回 。
如果指定了內嵌架構,則內嵌架構會用來在載入數據之前擴充現有的關係結構。 例如,如果 (發生任何衝突,則會引發例外狀況) 定義於不同數據類型之相同數據表中的相同數據行。
如果未指定內嵌架構,則根據 XML 檔的結構,關係結構會視需要透過推斷來擴充。 如果架構無法透過推斷來擴充以公開所有數據,則會引發例外狀況。
注意
DataSet
在串行化 XML 中逸出 (“_”) 等合法 XML 字元時,不會將 XML 專案與其對應的 DataColumn
或 DataTable
產生關聯。 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 方法則只讀取架構。
請注意, WriteXml 和 WriteXmlSchema 方法也是如此。 若要從 寫入 XML 數據,或同時 DataTable
寫入架構和數據,請使用 WriteXml
方法。 若要只撰寫架構,請使用 WriteXmlSchema
方法。
注意
InvalidOperationException如果要讀取或寫入至 實IDynamicMetaObjectProvider作且未實IXmlSerializable作 的資料行類型,DataRow
則會擲回 。
如果指定了內嵌架構,則內嵌架構會用來在載入數據之前擴充現有的關係結構。 例如,如果 (發生任何衝突,則會引發例外狀況) 定義於不同數據類型之相同數據表中的相同數據行。
如果未指定內嵌架構,則根據 XML 檔的結構,關係結構會視需要透過推斷來擴充。 如果架構無法透過推斷來擴充以公開所有數據,則會引發例外狀況。
注意
DataSet
在串行化 XML 中逸出 (“_”) 等合法 XML 字元時,不會將 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)
- 來源:
- DataTable.cs
- 來源:
- DataTable.cs
- 來源:
- DataTable.cs
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
參數
傳回
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 方法則只讀取架構。
請注意, WriteXml 和 WriteXmlSchema 方法也是如此。 若要從 寫入 XML 數據,或同時 DataTable
寫入架構和數據,請使用 WriteXml
方法。 若要只撰寫架構,請使用 WriteXmlSchema
方法。
注意
InvalidOperationException如果要讀取或寫入至 實IDynamicMetaObjectProvider作且未實IXmlSerializable作 的資料行類型,DataRow
則會擲回 。
如果指定了內嵌架構,則內嵌架構會用來在載入數據之前擴充現有的關係結構。 例如,如果 (發生任何衝突,則會引發例外狀況) 定義於不同數據類型之相同數據表中的相同數據行。
如果未指定內嵌架構,則根據 XML 檔的結構,關係結構會視需要透過推斷來擴充。 如果架構無法透過推斷來擴充以公開所有數據,則會引發例外狀況。
注意
DataSet
在串行化 XML 中逸出 (“_”) 等合法 XML 字元時,不會將 XML 專案與其對應的 DataColumn
或 DataTable
產生關聯。 DataSet
本身只會逸出 XML 項目名稱中的不合法 XML 字元,因此只能使用相同的字元。 逸出 XML 項目名稱中的法務字元時,處理時會忽略專案。