2010-11-21 2 views
3

Каков наилучший способ создать этот xml программно и сохранить файл? Источник данных просто будет CSV-файл (вы можете предложить файл CSV будет сформирован еще один способ, если это делает программирование XML-проще (гибкий в этой области)):напишите это xml в C#

business name, address line 
Comapny Name 1, 123 Main St. 
Company Name 2, 1 Elm St. 
Company Name 2, 2 Eml St. 

<?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> 
+0

мне нужно больше информации о контексте вашего вопроса. Вы имеете в виду, как записать его на жесткий диск? Вы имеете в виду, как создавать XML из базы данных или IENumerable? –

+0

Я хотел бы написать его в файл. И источником данных может быть список . – Rod

+1

Вы собираетесь использовать в веб-службах или WCF? –

ответ

0

Теперь я понимаю, что вы просто пытаетесь преобразовать CSV-файл в (приведенную) схему XML выше.

Чтобы следовать дальше от ответа от Джейсона, это должно выполнить большинство из них для вас и действовать в качестве стартового кода:

internal string Convert() 
    { 
     string[] lines = { 
          "Company Name 1, 123 Main St.", 
          "Company Name 2, 1 Elm St.", 
          "Company Name 2, 2 Elm St" 
         }; 

     //var lines = File.ReadLines(path); 
     var builder = new StringBuilder(); 

     foreach (var line in lines) 
     { 
      var fields = line.Split(','); 

      var settings = new XmlWriterSettings {OmitXmlDeclaration = true}; 
      using (var writer = XmlWriter.Create(builder, settings)) 
      { 

       //writer.WriteStartDocument(); 

       writer.WriteStartElement("ArrayofBusiness"); 
       writer.WriteStartElement("Business"); 
       writer.WriteElementString("Name", fields[0]); 
       writer.WriteStartElement("AddressList"); 
       writer.WriteStartElement("Address"); 
       writer.WriteElementString("AddressLine", fields[1]); 

       writer.WriteEndElement();//Address 
       writer.WriteEndElement();//AddressList 
       writer.WriteEndElement();//Business 
       writer.WriteEndElement();//ArrayOfBusiness 

       //writer.WriteEndDocument(); 
      } 
     } 

     return builder.ToString(); 
    } 
+0

Как вы делаете это, когда каждый элемент находится на собственной линии и имеет отступы? – Rod

+0

Это произойдет, когда вы откроете файл xml в xml-ридере. Бросьте его в IE, и это будет отступ. Я не думаю, что отступы важны только для данных. У XmlWriterSettings могут быть настройки отступов. Я проверю, когда попаду на компьютер – Kam

4
string path = @"C:\Path\To\Output.xml"; 
List<Business> list = // set data 

using (var streamWriter = new StreamWriter(new FileStream(path, FileMode.Write))) 
{ 
    using (var xmlWriter writer = new XmlTextWriter(streamWriter)) 
    { 
    var serialiser = new XmlSerializer(typeof(List<Business>)); 
    serialiser.Serialize(xmlWriter, list); 
    } 
} 
+0

спасибо за проницательный ответ, я изменил источник данных на файл csv, извиняюсь за обновление. – Rod

+0

@rod: Да, чтение файла CSV в список «Бизнес» - это тривиальная часть (и источник не имеет значения для поставленного вами вопроса). – jason

+0

, значит, вы имеете в виду, что xml можно вообще пропустить? Мне жаль, что я не буду следовать. – Rod

0

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

, например:

  • вы можете просматривать список и использовать C# XML команды
  • можно добавить XML-атрибуты для ваших классов и свойств и подтолкнуть их через serialiser
  • вы могли бы даже плюнуть XML непосредственно из SQL

Кроме того, мы должны предположить, тыс на приведенных элементах все доступные элементы, так как вы не предоставили схему.

0

На основе вашего комментария, похоже, ваш вопрос на самом деле о том, как читать, скажем, файл CSV и получать коллекцию Business объектов на основе файла.

я предположить Business класса определяются следующим образом:

class Business { 
    public string CompanyName { get; set; } 
    public string AddressLine { get; set; } 

    public Business(string companyName, string addressLine) { 
     this.CompanyName = companyName; 
     this.AddressLine = addressLine; 
    } 
} 

Тогда:

var businesses = new List<Business>(); 
var lines = File.ReadLines(path); 
foreach(var line in lines) { 
    string[] fields = line.Split(','); 
    string companyName = fields[0]; 
    string addressLine = fields[1]; 
    Business business = new Business(companyName, addressLine); 
    businesses.Add(business); 
} 

Обратите внимание, что я предполагаю, что поле не содержит встроенную запятую.

Смежные вопросы