【问题标题】:How to convert this .csv file to .xml with tags in the first row如何将此 .csv 文件转换为 .xml,第一行带有标签
【发布时间】:2016-02-19 03:38:10
【问题描述】:

这是我的 .csv 文件的一部分

CRUISE-ID;DEP-PORT;DEP-NAME-PORT;DEP-DATE;DEP-DAY;DEP-WEEKDAY;DEP-TIME;ARR-PORT;ARR-NAME-PORT;ARR-DATE;ARR-DAY;ARR-WEEKDAY;ARR-TIME;ITIN-CD;AREA/DEST
OR20160209BGIBGI;BGI;Bridgetown, Barbados;09/02/16;1;Tuesday;2000;POS;Port of Spain, Trinidad and Tobago;10/02/16;2;Wednesday;0900;U19M;CAR;
OR20160209BGIBGI;POS;Port of Spain, Trinidad and Tobago;10/02/16;2;Wednesday;1700;RSU;Roseau, Dominica;11/02/16;3;Thursday;1000;U19M;CAR;
OR20160209BGIBGI;RSU;Roseau, Dominica;11/02/16;3;Thursday;1800;STG;Saint George, Grenada;12/02/16;4;Friday;0800;U19M;CAR;
OR20160209BGIBGI;STG;Saint George, Grenada;12/02/16;4;Friday;1800;FDF;Fort de France, Martinique;13/02/16;5;Saturday;0800;U19M;CAR;

在第一行中,这些是 xml 的标签。我可以在没有这些标签的情况下将其转换为 xml。

 var lines = File.ReadAllLines(csvpath);
            var xmlFile = new XElement("TopElement",
                lines.Select(line=> new XElement("Items",
                    line.Split(';')
                       .Select((column, index) => new XElement("Column" + index, column)))));
            xmlFile.Save(xmlpath);

然后输出是这样的

<TopElement>
  <Items>
    <Column0>CODE</Column0>
    <Column1>LOC-CD</Column1>
    <Column2>PORT-CD</Column2>
    <Column3>DESC</Column3>
    <Column4>START-DT</Column4>
    <Column5>END-DT</Column5>
    <Column6>SHIP-CD</Column6>
    <Column7>PAXTYPE</Column7>
    <Column8>INVENTORIED</Column8>
    <Column9>APPLY-TO</Column9>
    <Column10>REGION-CD</Column10>
    <Column11>PRICE-TYPE</Column11>
    <Column12>PRICE-BASIS</Column12>
    <Column13>PRICE-I</Column13>
    <Column14>PRICE-J</Column14>
    <Column15>PRICE-C</Column15>
    <Column16>PRICE-A</Column16>
    <Column17>PRICE-S</Column17>
    <Column18>DESC-LONG</Column18>
  </Items>
  <Items>
    <Column0>ACF01</Column0>
    <Column1>ARR</Column1>
    <Column2>ACE</Column2>
    <Column3>TOUR OF NORTHERN LANZAROTE</Column3>
    <Column4>24/12/15</Column4>
    <Column5>25/02/16</Column5>
    <Column6>OX</Column6>
    <Column7>*</Column7>
    <Column8>YES</Column8>
    <Column9>I,J,C,A,S</Column9>
    <Column10>WEE</Column10>
    <Column11>N/A</Column11>
    <Column12>P</Column12>
    <Column13>0</Column13>
    <Column14>32</Column14>

这意味着 xml 文件的元素也作为值来。我想要这样。

<row>
<CODE>ACF01</CODE>
<LOC-CD>ARR</LOC-CD>
<PORT-CD>ACE</PORT-CD>
<DESC>TOUR OF NORTHERN LANZAROTE</DESC>
<START-DT>24/12/15</START-DT>
<END-DT>25/02/16</END-DT>
<SHIP-CD>OX</SHIP-CD>
<PAXTYPE>*</PAXTYPE>
<INVENTORIED>YES</INVENTORIED>
<APPLY-TO>I,J,C,A,S</APPLY-TO>
<REGION-CD>WEE</REGION-CD>
<PRICE-TYPE>N/A</PRICE-TYPE>
<PRICE-BASIS>P</PRICE-BASIS>
<PRICE-I>0</PRICE-I>
<PRICE-J>32</PRICE-J>
<PRICE-C>32</PRICE-C>
<PRICE-A>45</PRICE-A>
<PRICE-S>45</PRICE-S>
<DESC-LONG> del Rio- have your camera ready for capturing enchanting views for your memory book.</DESC-LONG>
</row>

我该怎么做。请帮帮我。

【问题讨论】:

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


    【解决方案1】:

    我假设您在名称开头有标题行。

    我还注意到您在其中一个列名中有/,查询替换为_,因为xml 无法接受

    var lines = File.ReadAllLines(filename);
    var columns =  lines[0].Split(';');
    
    var xmlFile = new XElement("Rows",
        lines.Skip(1).Select(line => new XElement("Row",
            line.Split(';')
            .Where(s=> !string.IsNullOrEmpty(s))
               .Select((column, index) => new XElement(columns[index].Replace("/", "_"), column)))));
    
    xmlFile.Save(ouputfile);
    

    输出

    <Rows>
      <Row>
        <CRUISE-ID>OR20160209BGIBGI</CRUISE-ID>
        <DEP-PORT>BGI</DEP-PORT>
        <DEP-NAME-PORT>Bridgetown, Barbados</DEP-NAME-PORT>
        <DEP-DATE>09/02/16</DEP-DATE>
        <DEP-DAY>1</DEP-DAY>
        <DEP-WEEKDAY>Tuesday</DEP-WEEKDAY>
        <DEP-TIME>2000</DEP-TIME>
        <ARR-PORT>POS</ARR-PORT>
        <ARR-NAME-PORT>Port of Spain, Trinidad and Tobago</ARR-NAME-PORT>
        <ARR-DATE>10/02/16</ARR-DATE>
        <ARR-DAY>2</ARR-DAY>
        <ARR-WEEKDAY>Wednesday</ARR-WEEKDAY>
        <ARR-TIME>0900</ARR-TIME>
        <ITIN-CD>U19M</ITIN-CD>
        <AREA_DEST>CAR</AREA_DEST>
      </Row>
      <Row>
        <CRUISE-ID>OR20160209BGIBGI</CRUISE-ID>
        <DEP-PORT>POS</DEP-PORT>
        <DEP-NAME-PORT>Port of Spain, Trinidad and Tobago</DEP-NAME-PORT>
        <DEP-DATE>10/02/16</DEP-DATE>
        <DEP-DAY>2</DEP-DAY>
        <DEP-WEEKDAY>Wednesday</DEP-WEEKDAY>
        <DEP-TIME>1700</DEP-TIME>
        <ARR-PORT>RSU</ARR-PORT>
        <ARR-NAME-PORT>Roseau, Dominica</ARR-NAME-PORT>
        <ARR-DATE>11/02/16</ARR-DATE>
        <ARR-DAY>3</ARR-DAY>
        <ARR-WEEKDAY>Thursday</ARR-WEEKDAY>
        <ARR-TIME>1000</ARR-TIME>
        <ITIN-CD>U19M</ITIN-CD>
        <AREA_DEST>CAR</AREA_DEST>
      </Row>
      <Row>
        <CRUISE-ID>OR20160209BGIBGI</CRUISE-ID>
        <DEP-PORT>RSU</DEP-PORT>
        <DEP-NAME-PORT>Roseau, Dominica</DEP-NAME-PORT>
        <DEP-DATE>11/02/16</DEP-DATE>
        <DEP-DAY>3</DEP-DAY>
        <DEP-WEEKDAY>Thursday</DEP-WEEKDAY>
        <DEP-TIME>1800</DEP-TIME>
        <ARR-PORT>STG</ARR-PORT>
        <ARR-NAME-PORT>Saint George, Grenada</ARR-NAME-PORT>
        <ARR-DATE>12/02/16</ARR-DATE>
        <ARR-DAY>4</ARR-DAY>
        <ARR-WEEKDAY>Friday</ARR-WEEKDAY>
        <ARR-TIME>0800</ARR-TIME>
        <ITIN-CD>U19M</ITIN-CD>
        <AREA_DEST>CAR</AREA_DEST>
      </Row>
      <Row>
        <CRUISE-ID>OR20160209BGIBGI</CRUISE-ID>
        <DEP-PORT>STG</DEP-PORT>
        <DEP-NAME-PORT>Saint George, Grenada</DEP-NAME-PORT>
        <DEP-DATE>12/02/16</DEP-DATE>
        <DEP-DAY>4</DEP-DAY>
        <DEP-WEEKDAY>Friday</DEP-WEEKDAY>
        <DEP-TIME>1800</DEP-TIME>
        <ARR-PORT>FDF</ARR-PORT>
        <ARR-NAME-PORT>Fort de France, Martinique</ARR-NAME-PORT>
        <ARR-DATE>13/02/16</ARR-DATE>
        <ARR-DAY>5</ARR-DAY>
        <ARR-WEEKDAY>Saturday</ARR-WEEKDAY>
        <ARR-TIME>0800</ARR-TIME>
        <ITIN-CD>U19M</ITIN-CD>
        <AREA_DEST>CAR</AREA_DEST>
      </Row>
    </Rows>
    

    【讨论】:

      【解决方案2】:
      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      
      namespace ConsoleApplication11
      {
          class Program
          {
      
              static void Main(string[] args)
              {
                  string CSVData = "CRUISE-ID;DEP-PORT;DEP-NAME-PORT;DEP-DATE;DEP-DAY;DEP-WEEKDAY;DEP-TIME;ARR-PORT;ARR-NAME-PORT;ARR-DATE;ARR-DAY;ARR-WEEKDAY;ARR-TIME;ITIN-CD;AREA/DESTOR20160209BGIBGI;BGI;Bridgetown, Barbados;09/02/16;1;Tuesday;2000;POS;Port of Spain, Trinidad and Tobago;10/02/16;2;Wednesday;0900;U19M;CAR;OR20160209BGIBGI;POS;Port of Spain, Trinidad and Tobago;10/02/16;2;Wednesday;1700;RSU;Roseau, Dominica;11/02/16;3;Thursday;1000;U19M;CAR;OR20160209BGIBGI;RSU;Roseau, Dominica;11/02/16;3;Thursday;1800;STG;Saint George, Grenada;12/02/16;4;Friday;0800;U19M;CAR;OR20160209BGIBGI;STG;Saint George, Grenada;12/02/16;4;Friday;1800;FDF;Fort de France, Martinique;13/02/16;5;Saturday;0800;U19M;CAR;";
                  List<string> ListData = CSVData.Split(';').ToList();
                  int ElementNumber = int.Parse(Math.Ceiling(ListData.Count/19.0).ToString());
                  StringBuilder XMLBuilder = new StringBuilder(5000);
                  XMLBuilder.AppendFormat("<TopElement>");
                  Console.WriteLine("<TopElement>");
                  for (int n = 0; n < ElementNumber; n++)
                  {
                      int m = n;
                      XMLBuilder.AppendFormat("<row>");
                      Console.WriteLine("<row>");
                      XMLBuilder.AppendFormat("<CODE>{0}</CODE>",m++<ListData.Count?ListData[m]:"");
                      Console.WriteLine("<CODE>{0}</CODE>", m< ListData.Count ? ListData[m] : "" );
                      XMLBuilder.AppendFormat("<LOC-CD>{0}</LOC-CD>", m++<ListData.Count?ListData[m]:"");
                      Console.WriteLine("<LOC-CD>{0}</LOC-CD>", m < ListData.Count ? ListData[m] : "");
                      XMLBuilder.AppendFormat("<PORT-CD>{0}</PORT-CD>", m++<ListData.Count?ListData[m]:"");
                      Console.WriteLine("<PORT-CD>{0}</PORT-CD>", m < ListData.Count ? ListData[m] : "");
                      XMLBuilder.AppendFormat("<DESC>{0}</DESC>", m++<ListData.Count?ListData[m]:"");
                      Console.WriteLine("<DESC>{0}</DESC>", m < ListData.Count ? ListData[m] : "");
                      XMLBuilder.AppendFormat("<START-DT>{0}</START-DT>", m++<ListData.Count?ListData[m]:"");
                      Console.WriteLine("<START-DT>{0}</START-DT>", m < ListData.Count ? ListData[m] : "");
                      XMLBuilder.AppendFormat("<END-DT>{0}</END-DT>", m++<ListData.Count?ListData[m]:"");
                      Console.WriteLine("<END-DT>{0}</END-DT>", m < ListData.Count ? ListData[m] : "");
                      XMLBuilder.AppendFormat("<SHIP-CD>{0}</SHIP-CD>", m++<ListData.Count?ListData[m]:"");
                      Console.WriteLine("<SHIP-CD>{0}</SHIP-CD>", m < ListData.Count ? ListData[m] : "");
                      XMLBuilder.AppendFormat("<PAXTYPE>{0}</PAXTYPE>", m++<ListData.Count?ListData[m]:"");
                      Console.WriteLine("<PAXTYPE>{0}</PAXTYPE>", m < ListData.Count ? ListData[m] : "");
                      XMLBuilder.AppendFormat("<INVENTORIED>{0}</INVENTORIED>", m++<ListData.Count?ListData[m]:"");
                      Console.WriteLine("<INVENTORIED>{0}</INVENTORIED>", m < ListData.Count ? ListData[m] : "");
                      XMLBuilder.AppendFormat("<APPLY-TO>{0}</APPLY-TO>", m++<ListData.Count?ListData[m]:"");
                      Console.WriteLine("<APPLY-TO>{0}</APPLY-TO>", m < ListData.Count ? ListData[m] : "");
                      XMLBuilder.AppendFormat("<REGION-CD>{0}</REGION-CD>", m++<ListData.Count?ListData[m]:"");
                      Console.WriteLine("<REGION-CD>{0}</REGION-CD>", m < ListData.Count ? ListData[m] : "");
                      XMLBuilder.AppendFormat("<PRICE-TYPE>{0}</PRICE-TYPE>", m++<ListData.Count?ListData[m]:"");
                      Console.WriteLine("<PRICE-TYPE>{0}</PRICE-TYPE>", m < ListData.Count ? ListData[m] : "");
                      XMLBuilder.AppendFormat("<PRICE-BASIS>{0}</PRICE-BASIS>", m++<ListData.Count?ListData[m]:"");
                      Console.WriteLine("<PRICE-BASIS>{0}</PRICE-BASIS>", m < ListData.Count ? ListData[m] : "");
                      XMLBuilder.AppendFormat("<PRICE-I>{0}</PRICE-I>", m++<ListData.Count?ListData[m]:"");
                      Console.WriteLine("<PRICE-I>{0}</PRICE-I>", m < ListData.Count ? ListData[m] : "");
                      XMLBuilder.AppendFormat("<PRICE-J>{0}</PRICE-J>", m++<ListData.Count?ListData[m]:"");
                      Console.WriteLine("<PRICE-J>{0}</PRICE-J>", m < ListData.Count ? ListData[m] : "");
                      XMLBuilder.AppendFormat("<PRICE-C>{0}</PRICE-C>", m++<ListData.Count?ListData[m]:"");
                      Console.WriteLine("<PRICE-C>{0}</PRICE-C>", m < ListData.Count ? ListData[m] : "");
                      XMLBuilder.AppendFormat("<PRICE-A>{0}</PRICE-A>", m++<ListData.Count?ListData[m]:"");
                      Console.WriteLine("<PRICE-A>{0}</PRICE-A>", m < ListData.Count ? ListData[m] : "");
                      XMLBuilder.AppendFormat("<PRICE-S>{0}</PRICE-S>", m++<ListData.Count?ListData[m]:"");
                      Console.WriteLine("<PRICE-S>{0}</PRICE-S>", m < ListData.Count ? ListData[m] : "");
                      XMLBuilder.AppendFormat("<DESC-LONG>{0}</DESC-LONG>", m++<ListData.Count?ListData[m]:"");
                      Console.WriteLine("<DESC-LONG>{0}</DESC-LONG>", m < ListData.Count ? ListData[m] : "");
                      XMLBuilder.AppendFormat("</row>");
                      Console.WriteLine("</row>");
                  }
                  Console.WriteLine("</TopElement>");
                  XMLBuilder.AppendFormat("</TopElement>");
                  Console.ReadLine();
              }
          }
      }
      

      【讨论】:

      • 这是什么5000在这部分StringBuilder XMLBuilder = new StringBuilder(5000);
      猜你喜欢
      • 1970-01-01
      • 2021-07-31
      • 2014-04-15
      • 2011-01-01
      • 1970-01-01
      • 2011-03-21
      • 2018-04-18
      • 1970-01-01
      • 2020-06-26
      相关资源
      最近更新 更多