【问题标题】:How can I convert XML files to one CSV file in C#?如何在 C# 中将 XML 文件转换为一个 CSV 文件?
【发布时间】:2011-02-15 17:11:18
【问题描述】:

我有一组 XML 内容的字符串。我想遍历我的集合并构建一个 CSV 文件以流式传输给用户以供下载(有时集合中可能有数百个)。这是我的循环:

foreach (string response in items.Responses)
{
    string xmlResponse = response;

    //BUILD CSV HERE
}

这就是我的 XML 内容在每次迭代 (xmlResponse) 中的样子。我想把它放在一个包含“属性”属性的平面文件中:

<?xml version="1.0"?>
<response>
  <properties id="60375c90-9dd7-400f-aafb-a8726df409a9" name="Account Request" date="Thursday, March 04, 2010 2:14:07 PM" page="http://mydomain/sitefinity/CreateAccount.aspx" ip="192.168.1.255" browser="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8" referrer="http://mydomain/sitefinity/CreateAccount.aspx" confirmation="True" subject="Email from website: Account Request Form" sender="admin@admin.com" recipients="test@test.com, , " />
  <fields>
    <field>
      <label>Personal Details</label>
      <value>Personal Details</value>
    </field>
    <field>
      <label>Name</label>
      <value>Tim Wales</value>
    </field>
    <field>
      <label>Email</label>
      <value>test@test.com</value>
    </field>
    <field>
      <label>Website</label>
      <value></value>
    </field>
    <field>
      <label>Password</label>
      <value></value>
    </field>
    <field>
      <label>Phone</label>
      <value></value>
    </field>
    <field>
      <label>Years in Business</label>
      <value></value>
    </field>
    <field>
      <label>Background</label>
      <value>Background</value>
    </field>
    <field>
      <label>Place of Birth</label>
      <value>Earth</value>
    </field>
    <field>
      <label>Date of Birth</label>
      <value></value>
    </field>
    <field>
      <label>Some Label</label>
      <value>Some Label</value>
    </field>
    <field>
      <label>Industry</label>
      <value> Technology  Other</value>
    </field>
    <field>
      <label>Pets</label>
      <value>Dog</value>
    </field>
    <field>
      <label>Your View</label>
      <value>Positive</value>
    </field>
    <field>
      <label>Misc</label>
      <value>Misc</value>
    </field>
    <field>
      <label>Comments</label>
      <value></value>
    </field>
    <field>
      <label>Agree to Terms?</label>
      <value>True</value>
    </field>
  </fields>
</response>


<?xml version="1.0"?>
<response>
  <properties id="60375c90-9dd7-400f-aafb-a8726df409a9" Form="Account Request" Date="Tuesday, March 16, 2010 6:21:07 PM" Page="http://mydomain/sitefinity/Home.aspx" IP="fe80::1c0f57:9ee3%10" Browser="Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30729)" Referrer="http://mydomain/sitefinity/Home.aspx" Subject="Email from website: Account Request Form" Sender="admin@admin.com" Recipients="test@test.com" Confirmation="True" />
  <fields>
    <field>
      <label>Personal Details</label>
      <value>Personal Details</value>
    </field>
    <field>
      <label>Name</label>
      <value>erger</value>
    </field>
    <field>
      <label>Email</label>
      <value></value>
    </field>
    <field>
      <label>Website</label>
      <value></value>
    </field>
    <field>
      <label>Password</label>
      <value></value>
    </field>
    <field>
      <label>Phone</label>
      <value></value>
    </field>
    <field>
      <label>Years in Business</label>
      <value></value>
    </field>
    <field>
      <label>Background</label>
      <value>Background</value>
    </field>
    <field>
      <label>Place of Birth</label>
      <value>Earth</value>
    </field>
    <field>
      <label>Date of Birth</label>
      <value></value>
    </field>
    <field>
      <label>Some Label</label>
      <value>Some Label</value>
    </field>
    <field>
      <label>Industry</label>
      <value> Technology  Service</value>
    </field>
    <field>
      <label>Pets</label>
      <value>Dog</value>
    </field>
    <field>
      <label>Your View</label>
      <value>Positive</value>
    </field>
    <field>
      <label>Misc</label>
      <value>Misc</value>
    </field>
    <field>
      <label>Comments</label>
      <value></value>
    </field>
    <field>
      <label>Agree to Terms?</label>
      <value>True</value>
    </field>
  </fields>
</response>

<?xml version="1.0"?>
<response>
  <properties id="60375c90-9dd7-400f-aafb-a8726df409a9" Form="Account Request" Date="Tuesday, March 16, 2010 4:50:17 PM" Page="http://mydomain/sitefinity/Home.aspx" IP="fe80::1c0f:ee3%10" Browser="Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30729)" Referrer="http://mydomain/sitefinity/Home.aspx" Subject="Email from website: Account Request Form" Sender="admin@admin.com" Recipients="test@test.com" Confirmation="True" />
  <fields>
    <field>
      <label>Personal Details</label>
      <value>Personal Details</value>
    </field>
    <field>
      <label>Name</label>
      <value>esfs</value>
    </field>
    <field>
      <label>Email</label>
      <value></value>
    </field>
    <field>
      <label>Website</label>
      <value></value>
    </field>
    <field>
      <label>Password</label>
      <value></value>
    </field>
    <field>
      <label>Phone</label>
      <value></value>
    </field>
    <field>
      <label>Years in Business</label>
      <value></value>
    </field>
    <field>
      <label>Background</label>
      <value>Background</value>
    </field>
    <field>
      <label>Place of Birth</label>
      <value>Earth</value>
    </field>
    <field>
      <label>Date of Birth</label>
      <value></value>
    </field>
    <field>
      <label>Some Label</label>
      <value>Some Label</value>
    </field>
    <field>
      <label>Industry</label>
      <value> Technology  Service</value>
    </field>
    <field>
      <label>Pets</label>
      <value>Dog</value>
    </field>
    <field>
      <label>Your View</label>
      <value>Positive</value>
    </field>
    <field>
      <label>Misc</label>
      <value>Misc</value>
    </field>
    <field>
      <label>Comments</label>
      <value></value>
    </field>
    <field>
      <label>Agree to Terms?</label>
      <value>True</value>
    </field>
  </fields>
</response>

有人可以帮忙吗?

【问题讨论】:

    标签: c# asp.net xml .net-3.5 csv


    【解决方案1】:

    首先,您需要将字符串加载到XDocument 中以便于查询:

    var xdoc = XDocument.Parse(xmlResponse);
    

    然后你可以使用XDocument类的方法(例如Elements("Blah")Attributes("Blah"))来提取你想要的值。

    我不认为你会找到任何人会简单地为你写完整的东西:那是你的工作。如果您能具体告诉我们您遇到的问题,那么我们可以为您提供更多帮助。

    【讨论】:

    • 对,我的问题是构建 CSV 文本。有没有像 XDocument 这样的内置 CSV 对象?否则,我将不得不转义字符并手动分隔可能会变得混乱的数据。另外,如果有 2,500 次迭代来构建一个大的 CSV 文件(我认为是流),我该如何处理性能?
    【解决方案2】:

    使用 XSLT 将 XML 转换为 CSV。 这是以前的 Stackoverflow 答案
    XML to CSV Using XSLT

    这里是 C# 代码的链接,用于在 .Net 2.0 中实现 XSLT

    How do I write an XSLT to transform XML to CSV?

    【讨论】:

      猜你喜欢
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-08
      • 1970-01-01
      • 1970-01-01
      • 2020-11-03
      • 2011-03-05
      相关资源
      最近更新 更多