1

即使有很多例子,我找不到我需要的?我的问题只是标题“如何将数据表转换为 xml”...

虽然,您可以建议任何技术的解决方案,但我也有一个起点,请看一下这段代码。

    Dim xmlDoc As New XDocument(
                    New XElement("Class",                                   
                                From row In dt.AsEnumerable()
                                Select New XElement("PUPIL",
                                    New XAttribute("FIRSTNAME", row.Field(Of String)("First Name")),
                                    New XAttribute("LASTNAME", row.Field(Of String)("Last Name")),
                                    New XAttribute("DOB", row.Field(Of String)("DoB")),
                                    New XAttribute("YEAR", row.Field(Of String)("Year")),
                                    New XAttribute("SEX", row.Field(Of String)("Gender")),
                                    New XAttribute("CLASSNAME", row.Field(Of String)("Reg"))
                                )))))

在此示例中,我需要知道要进行转换的列数和列名。我讨厌将列名硬编码到该 Linq 中,是否可以在 Linq 中使用任意数量的列和列名?

如果有人可以建议我改进 Linq 以处理数据表中的任何列,那就太好了。

非常感谢。

LINQ 解决方案...

    Dim xmlDoc As New XDocument(                       
         From row In dt.Rows
         Select New XElement("Pupil",
         From column In dt.Columns
         Select
         New XAttribute(column.ToString, row.Item(column.ToString))))

Datatable.WriteXML 解决方案,请参考 Habib 的帖子

4

1 回答 1

2

代替 LINQ,您可以使用:DataTable.WriteXML();

        DataTable dt = new DataTable();
        dt.WriteXml("myxmlfile.xml");

如果要根据 Schema 读写数据,请执行以下步骤:

  • 我相信您在 DataTable 中有数据,您可能也有数据的 xml,在 Visual Studio 中打开该 XML,使用生成架构 -> 在菜单中选择 -> XML -> 创建架构
  • 这将生成一个模式文件,保存该模式文件,例如 test1.xsd
  • 试试下面的代码

    DataSet ds = new DataSet();
    ds.ReadXmlSchema("test1.xsd"); //This will read and prepare dataset according to tes1.xsd schema
    ds.ReadXml("test.xml"); // This will read the XML and it should be schema compliant 
    ds.WriteXml("test7.xml");//This will write the new XML according to schema
    

    在您的情况下,您可以根据需要修改架构,然后您可以使用 XML 架构将文档从数据集生成到 XML。您必须先将数据表保存在数据集中。(我不太确定这种方法,但由于我没有看到对这个问题的新回复,我认为它可能对你有帮助)

于 2012-04-23T09:06:45.247 回答