Как я могу превратить набор строк CSV в XML? - PullRequest
1 голос
/ 20 ноября 2010

Есть ли способ взять электронную таблицу и превратить ее в XML-файл ниже?

<?xml version="1.0"?>
<ArrayOfBusiness xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Business>
    <Name>Company Name 1</Name>
    <AddressList>
      <Address>
        <AddressLine>123 Main St.</AddressLine>
      </Address>
    </AddressList>
  </Business>
  <Business>
    <Name>Company Name 2</Name>
    <AddressList>
      <Address>
        <AddressLine>1 Elm St.</AddressLine>
      </Address>
      <Address>
        <AddressLine>2 Elm St.</AddressLine>
      </Address>
    </AddressList>
  </Business>
</ArrayOfBusiness>

Ответы [ 3 ]

2 голосов
/ 21 ноября 2010

Я положил это в LinqPad , и он сделал то, что вам нужно. Если вы никогда не использовали LinqPad ... сейчас самое время начать.

 var csvs = new List<string>();  

csvs.Add( "Company Name 1,123 Main St."); 
 csvs.Add("Company Name 2,1 Elm St.,2 Elm St."); 

 var xml = 
 (from c in csvs 
 let split = c.Split(',')
 select  // split
 new XElement("ArrayOfBusiness", 
    new XElement("Business", 
        new XElement("Name", split[0] ), 
        new XElement("AddressList", 
          new XElement("Address"
            ,
            (from s in split.Skip(1) // skip the first split 
            select 
            new XElement("AddressLine", s)) 
        )
 )))); // <-- is it LISP? 

 xml.Dump();

Результаты:

<ArrayOfBusiness>
  <Business>
    <Name>Company Name 1</Name>
    <AddressList>
      <Address>
        <AddressLine>123 Main St.</AddressLine>
      </Address>
    </AddressList>
  </Business>
  <Business>
    <Name>Company Name 2</Name>
    <AddressList>
      <Address>
        <AddressLine>1 Elm St.</AddressLine>
        <AddressLine>2 Elm St.</AddressLine>
      </Address>
    </AddressList>
  </Business>
</ArrayOfBusiness> 

Это не совсем то, что вы хотели, но функционально эквивалентно мне. Возможно, нужно немного доработать в LINQ.

Запись в файл с: File.WriteAllText(@"c:\temp\addresses.xml", xml.ToString());

0 голосов
/ 21 ноября 2010

Я бы сказал, да, но без просмотра файла CSV трудно сказать.

Если ваш CSV что-то вроде этого:

Имя, Адрес1, Адрес2

Название компании 1,123 Main St.,

Название компании 2, 1 Elm St., 1 Elm St.

Вы можете легко разобрать это в классе.

class Business
{
  public string Name { get; set; }
  public List<Address> AddressList { get; set; }
}

class Address
{
  public string AddressLine { get; set; }
}

(не проверено)

0 голосов
/ 20 ноября 2010

Анализ файла .csv в бизнес-объектах должен быть простым.

Это простой случай использования класса XmlSerializer для генерации xml.

...