当前位置: 首页 > 编程语言 > C#

如何以可读格式在WriteXml中显示DataTableXML?分享

时间:2023-04-10 15:19:17 C#

如何在WriteXml中以可读格式显示DataTableXML?我有一些要导出到文件并查看的数据表。我可以使用DataTable.WriteXml()将数据表的内容输出到XML,但是以表格形式显示此数据的简单方法是什么?一种建议的方法是使用XSLT或类似方法将XML转换为可读的内容。我不知道它是否简单,但如果它易于使用,那将是一个很好的解决方案。下面显示了我从WriteXml()获得的单个DataTable的XML示例。这是一个名为“RecentMatter”的表,包含10列和3行数据。我希望它显示为数据表。我不太关心数据值的格式,例如将DateTime值转换为更易读的值。我在生成它时使用了XmlWriteMode.WriteSchema参数。如果它被删除,所有模式信息(在第一个标记之前)将被删除。不同的表显然会有不同数量的列,因此任何解决方案都需要处理这个问题,理想情况下无需修改具有不同列的表的解决方案。PSLTP6RJK99999-2302测试事项DP测试事项99999true2011-08-23T23:40:24.13+01:00PSLTP6RJK999991.0002Lathe1LWTest2true2011-07-12T16:57:27.173+01:00Lathe-909R91K1LWTest1false2011-07-12T01:59:06.887+01:00试一试。可能是将DataTable序列化为XML的最简单方法:DataTabletable=newDataTable();System.IO.StringWriterwriter=newSystem.IO.StringWriter();//注意我们忽略了模式,所以我们得到了干净的XML//您可以根据需要更改写入模式以获得结果table.WriteXml(writer,XmlWriteMode.IgnoreSchema,false);字符串dataTableXml=writer.ToString();至于以可读格式显示它,我建议将XML传递给XSL转换器,然后您可以使用它来解析XML并根据需要操作输出。将XSLT转换应用于数据集http://msdn.microsoft.com/en-us/library/8fd7xytc%28v=vs.71%29.aspx#Y289这是我创建的一个简单示例,用于解释如何使用XSL转换器。我还没有测试过它,但它应该非常接近:DataSetds=newDataSet();StringBuildersbXslOutput=newStringBuilder();使用(XmlWriterxslWriter=XmlWriter.Create(sbXslOutput)){XslCompiledTransformtransformer=newXslCompiledTransform();变压器。加载(“transformer.xsl”);XsltArgumentListargs=newXsltArgumentList();transformer.Transform(新XmlDataDocument(ds),args,xslWriter);}字符串dataSetHtml=sbXslOutput.ToString();使用XSLT将XML格式化为HTML下面是一个使用XSLT将XML转换为HTML表格的示例。它应该很容易采用,因此您可以将它与序列化数据集一起使用。UserLoginMatterNumber......我构建了这个可能对您有用的方法(如果需要,请删除破折号装饰...)。它应该像这样呈现表格:+------------+----------+----------+|专栏1|专栏2|专栏3|+-----------+------------+----------+|asdfasdf|asdfasdf|asdfasdf|||asdfasdf|+------------+------------+----------+这是代码:以上是C#学习教程:如何在WriteXml中读取格式显示数据表XML?如果分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注publicvoidWriteTable(DataTabletable,StreamoutputStream){//创建writerStreamWriterwriter=newStreamWriter(输出流);//计算最大长度以构建正确的表格列DictionarymaxLengths=newDictionary();foreach(DataColumncolumnintable.Columns){maxLengths.Add(column.ColumnName,column.ColumnName.Length);foreach(DataRowrowintable.Rows){maxLengths[column.ColumnName]=Math.Max(maxLengths[column.ColumnName],Convert.ToString(row[column.ColumnName]).Length);}}//构建水平规则以将标题与数据字符串分开horizo??ntalRule="+";foreach(数据Ccolumncolumnintable.Columns){horizo??ntalRule+=String.Format("-{0}-+",newstring('-',maxLengths[column.ColumnName]));}writer.WriteLine(horizo??ntalRule);//写标题writer.Write("|");foreach(DataColumncolumnintable.Columns){writer.Write("{0,"+(-(maxLengths[column.ColumnName]))+"}|",column.ColumnName);}writer.WriteLine();writer.WriteLine(horizo??ntalRule);//写入数据foreach(DataRowrowintable.Rows){writer.Write("|");foreach(table.Columns中的DataColumn列){writer.Write("{0,"+(-(maxLengths[column.ColumnName]))+"}|",row[column.ColumnName]);}writer.WriteLine();}writer.WriteLine(horizo??ntalRule);//关闭编写器writer.Close();}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: