【发布时间】:2016-10-23 06:03:30
【问题描述】:
我是 C# 新手,我知道这对每个人来说都是一项非常艰巨和具有挑战性的任务。我有一个需要将基于模板的 XML 转换为 CSV 的案例。我在下面列出了模板、示例 XML 和预期的 CSV。
我的模板将有一些列,这些列应该是输出 CSV 中的 标题。我们希望将模板中的每一列与 XML 匹配,并检查它是否存在。如果 XML 中存在模板列值,则将其 添加 到 CSV 中,如果不存在,则 将其添加为 null,如下例所示。
同样在给定的 XML 示例中,它具有三种类型的行
- TRX
- TRXR
- TRXC
我们只需要考虑前两种类型的行。我们必须忽略 XML 中的 TRXC 类型行。
给定模板
var templeteList = new List<string> //Consider this as my template
{
"ID",
"Name",
"Address",
"Phone",
"Email",
"Gender"
};
示例 XML
<?xml version="1.0" encoding="utf-8"?>
<StudentXML>
<TRX ID="2" Name="Smita" Address="Pune" Gender="F" Phone="987654321"/>
<TRX ID="2" Name="Ram" Phone="3554321" Email="ram@mail.com" />
<TRX ID="1" Name="John" Address="Mumbai" Phone="NULL" Email="John@mail.com" Gender="M" />
<TRXR ID="3" Name="NULL" Address="Mumbai" Phone="121212" Email="Don@mail.com" Gender="M" />
<TRXC ID="3" Name="Prem" Address="Mumbai" Phone="121212" Email="Prem@mail.com" Gender="M"/>
</StudentXML>
预期输出
"ID", "Name", "Address", "Phone", "Email", "Gender"
"2", "Smita", "Pune", "987654321", "NULL", "F"
"2", "Ram", "NULL", "3554321", "ram@mail.com", "NULL"
"1", "John", "Mumbai", "NULL", "ohn@mail.com", "M"
"3", "NULL", "Mumbai", "121212", "Don@mail.com", "M"
我尝试使用 XML Reader,但将 60 万 XML 行的 XML 转换为 CSV 需要更长的时间。
var dataSet = new DataSet();
dataSet.ReadXml("XML File Name");//This line takes to much longer
如果有人能从这里帮助我,我将非常感激。
【问题讨论】:
-
如果结构不变我推荐
XmlSerializerjonasjohn.de/snippets/csharp/xmlserializer-example.htm -
@SebastianSchulz 结构正在发生变化,每行都不相同
-
您写道:我们必须忽略 TRXC。接下来,您编写 Expected Output,我们可以看到来自 TRXC 的数据。哪里有差异?
标签: c# xml linq csv xml-parsing