我需要帮助将 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并进行分组,但在歌曲元素中仍然有album="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))))