将Datatable导出为xml

3

我有一些 DataTables,想要将其导出为 xml 文件。我可以使用 DataTable.WriteXml()DataTables 的内容输出到 XML

我需要使用如下所示的 Response object。我需要在输出的 xml 根元素中添加属性。请帮我完成这个任务。以下是我正在使用的代码:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim FileName1 As String = "Sheet1.xml"
    Response.Clear()
    Response.AddHeader("Content-Disposition", "attachment; filename=" & FileName1)
    Response.ContentType = "text/xml"
    Dim ds As New DataSet("BuildingGroups")
    ds.EnforceConstraints = False
    Dim dtBuildingGroup As DataTable = Pipeline.Products.Components.BuildingGroupManager.GetBuildingGroupsToXML
    Dim result As String
    Dim sw As New StringWriter()
    dtBuildingGroup.TableName = "BuildingGroup"
    ds.Tables.Add(dtBuildingGroup)
    'Dim doc As New XmlDataDocument(ds)
    ds.WriteXml(sw)
    result = sw.ToString()
    Response.Write(result)
    Response.End()
End Sub

你正在使用哪个版本的.NET? - Learner
我正在使用2.0版本。 - user1707572
1个回答

4
你需要从XML中获取一个字符串,以便在Response.Write(result)中使用它,下面是一些方法:
假设创建了一个小的DataSet,如下所示:
Dim dt As New DataTable 
dt.Columns.Add(New DataColumn("Column1"))
dt.Columns.Add(New DataColumn("Column2"))
Dim r = dt.NewRow
r.Item(0) = "Value1"
r.Item(1) = "Value2"
dt.Rows.Add(r)
r = dt.NewRow
r.Item(0) = "Value3"
r.Item(1) = "Value4"
dt.Rows.Add(r)
Dim ds As New DataSet
ds.Tables.Add(dt)
  • You can use GetXml methods from the DataSet.

    Dim simpleresult As String = ds.GetXml
    

    Output:

    <NewDataSet>
      <Table1>
        <Column1>Value1</Column1>
        <Column2>Value2</Column2>
      </Table1>
      <Table1>
        <Column1>Value3</Column1>
        <Column2>Value4</Column2>
      </Table1>
    </NewDataSet>
    
  • You can use WriteXml methods from the DataSet or a DataTable if you want to control XmlWriteMode. You get the String using a MemoryStream.

    Dim result As String
    Using ms As New IO.MemoryStream()
        ds.WriteXml(ms, System.Data.XmlWriteMode.WriteSchema)
        result = System.Text.Encoding.UTF8.GetString(ms.ToArray)
    End Using
    

    Output:

    <NewDataSet>
      <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
        <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
          <xs:complexType>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
              <xs:element name="Table1">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Column1" type="xs:string" minOccurs="0" />
                    <xs:element name="Column2" type="xs:string" minOccurs="0" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:choice>
          </xs:complexType>
        </xs:element>
      </xs:schema>
      <Table1>
        <Column1>Value1</Column1>
        <Column2>Value2</Column2>
      </Table1>
      <Table1>
        <Column1>Value3</Column1>
        <Column2>Value4</Column2>
      </Table1>
    </NewDataSet>
    

1
这是我在stackoverflow上一段时间以来遇到的最简洁、有用和完美书写的答案。 - Daniel Gee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接