艰难的表格转换为 XML
我有一个从数据库中选择的数据表(嗯,这些数据跨多个表,查询并放入数据表后,如下所示)
ColumnA ColumnB
11
33
44
22
55
但我想将其转换为这样的XML
<root>
<header name ='a'>
<item name='11' />
<item name='22' />
</header>
<header name ='b'>
<item name='33' />
<item name='44' />
<item name='55' />
</header>
</root>
有没有一种简单的方法可以通过C#实现它?
I have a DataTable which I select from database (Well, these data cross several tables, after the query and putting into a DataTable, it shows at below)
ColumnA ColumnB
a 11
b 33
b 44
a 22
b 55
but I want to transform it into an XML like this
<root>
<header name ='a'>
<item name='11' />
<item name='22' />
</header>
<header name ='b'>
<item name='33' />
<item name='44' />
<item name='55' />
</header>
</root>
Is there an easy way to implement it by C#?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
为什么要麻烦 C# ?您可以直接在 T-SQL 中执行此操作(SQL Server 2005 及更高版本):
为您提供:
您可以使用标准 ADO.NET
SqlCommand
执行此 SQL 查询,并返回已格式化的 XML。马克
Why bother with C# ?? You can do it in T-SQL directly (SQL Server 2005 and up):
Gives you:
You can execute this SQL query using standard ADO.NET
SqlCommand
and get back the XML nicely formatted already.Marc
好的,在了解到数据在 DataTable 中可用之后,我们开始采用第二种方法。
代码有点复杂,因为基于 DataTable,您在分组等方面实际上无法做太多事情。我正在构建
XmlDocument
(因为您使用的是 .NET 2.0)同时扫描数据行。我需要跟踪字典中的元素,以便将具有相同“ColumnA”值的第二个、第三个条目添加到现有的
XmlElement
在文档中 - 这有点复杂,但如果您仔细研究它,我希望您会发现这实际上没有欺骗或任何东西 - 只是在构建XmlDocument
的过程中进行了一些簿记:OK, second approach after learning that the data is available in a
DataTable
to begin with.The code is a bit more involved, since based on a DataTable, you can't really do much in terms of grouping etc. I am building up the
XmlDocument
(since you're on .NET 2.0) while scanning through the rows of data. I need to keep track of the<header>
elements in a dictionary, in order to add a second, third entry with the same "ColumnA" value to that already existingXmlElement
in the document - it's a bit involved, but if you study it carefully, I hope you see it's really no trickery or anything - just a bit of bookkeeping along the way of building theXmlDocument
:使用 LINQ:-
With LINQ:-
这将使用 .NET 3.5 和 XDocument 来完成
This will do it using .NET 3.5 and the XDocument