【发布时间】:2012-05-16 17:13:28
【问题描述】:
我需要帮助将 DataTable 转换为 XML。我已经使用 LINQ 完成了它,但我无法完全按照我的要求完成。我做了一张图片,以便您可以轻松理解。 XML 需要采用某种格式,如下所示,所以我不能只使用 dt.writexml()。艺术家 ID 需要自动编号。歌曲按艺术家分组。更喜欢 Linq 中的解决方案,因为这是我在整个项目中使用的,但我无法在这里得到我想要的。列名是已知的,因此您可以在代码中使用类似的内容。 row.Field(Of String)("title")
非常感谢。我是认真的。抱歉英语不好。
CreateDatatable - 这个简单的代码应该创建一个数据表
Dim dTable As New DataTable
dTable.Columns.Add("Title")
dTable.Columns.Add("Artist")
dTable.Columns.Add("Album")
dTable.Rows.Add("Baby one more time", "Britney Spears", "Baby one more time")
dTable.Rows.Add("Crazy", "Britney Spears", "Best of")
dTable.Rows.Add("Every time", "Britney Spears", "Best of")
dTable.Rows.Add("Black and White", "Michael Jackson", "Best of")
dTable.Rows.Add("You are not alone", "Michael Jackson", "Best of")
dTable.Rows.Add("Smile", "Michael Jackson", "Best of")
我现在所拥有的。它会将它的数据表转换为没有分组和专辑索引的 xml。
Dim xmlDoc As New XDocument(
From row In dt.Rows
Select XElement("SONG",
From column In dt.Columns
Select
New XAttribute(column.Name, row.Item(column.Name))
)
)
嗯 .. 我还有一些代码 .. 将查询第一个创建的 xml 并进行分组,但在歌曲元素中仍然具有专辑 =“albumname”作为属性。它应该只是从数据表到 xml 的一个查询。我讨厌不得不再次查询 xml 来重新格式化它。
Dim replacement = New XDocument(New XElement("root",
original.Descendants("Song")
.GroupBy(Function(x) Convert.ToString(x.Element("artist").value))
.[Select](Function(songsForArtist, index)
New XElement("artist", New XAttribute("id", index + 1),
New XAttribute("name", songsForArtist.Key), songsForArtist))))
【问题讨论】:
-
如果您提供创建示例数据表的代码,我们会更容易提供帮助。
-
谢谢家伙..我编辑了帖子..请看。
-
我误解了蒂姆的评论,我在第一个示例中添加了一些代码来创建一个简单的数据表谢谢
标签: asp.net xml vb.net linq datatable