2010-11-21 23 views
3

Bu xml'yi programlı olarak üretmenin ve dosyaya devam etmenin en iyi yolu nedir? veri kaynağı sadece (bu alandaki esnek (xml kolay programlama yaparsa) başka bir yol oluşturulabilir Eğer csv dosyasını önerebilir) bir csv dosyası olacak:Bu xml'yi yazın 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

Ben sorunuzun bağlamında ilgili daha fazla ayrıntı gerekir. Bunu sabit sürücüye nasıl yazacağını kastediyorsun? Bir DB'den veya IENumerable'dan XML nasıl yaratılacağını mı kastediyorsunuz? –

+0

Dosyaya yazmak istiyorum. Ve veri kaynağı bir liste olabilir. – Rod

+1

Web Hizmetlerinde veya WCF'de mi kullanıyorsunuz? Veri kaynağı için –

cevap

0

Artık, CSV dosyasını yukarıdaki (anlaşılır) XML şemasına dönüştürmeye çalıştığınızı anlıyorum.

Jason dan cevapta itibaren izleyin, bu marş kodu olarak size ve hareket için bunun çoğu başarmak olmalıdır:

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

Her bir elementin kendi çizgisinde olduğu ve girintili olduğu yerde nasıl yapılır? – Rod

+0

Bu, xml dosyasını bir xml okuyucuda açtığınızda gerçekleşir. IE'ye bırakın ve girintilendir. Girintinin sadece veriler için önemli olduğunu düşünmüyorum. XmlWriterSettings, girinti ayarlarına sahip olabilir. Bir PC'ye ne zaman geldiğimi kontrol edeceğim – 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

Anlayışlı cevap için teşekkürler, veri kaynağını bir csv dosyasına değiştirdim, güncelleme için özür dilerim. – Rod

+0

@rod: Hadi, CSV dosyasını bir 'Business 'listesine okumak, önemsiz kısımdır (ve kaynak, sorduğunuz soru için ilgisizdir). – jason

+0

Yani xml'in tamamı atlanabilir mi? Üzgünüm, takip etmiyorum. – Rod

0

anlayabilirim Bu soruyu cevaplamanın zorluğu. Orada xml yeniden birçok yolu vardır ancak her teknik örneğin sistemin

bağlı yanlısı ve con vardır: listeyi yineleme ve C# xml

  • Eklemek olabilir komutları kullanabilirsiniz

    • xml sınıflarınız ve özelliklere niteliklerini ve biz th üstlenmek zorunda Bunun üzerine sql

    doğrudan

  • bile tükürmek olabilecek bir serialiser yoluyla xml onları dışarı itmek Gösterilen öğelerde, şema sağlamadığınız tüm öğeler bulunur.

  • 0

    Yorumunuza dayanarak, sorunuzun aslında bir CSV dosyasını nasıl okuyacağınız ve dosya temelinde Business nesnenin bir koleksiyonunu nasıl elde edeceği ile ilgili olduğu görülmektedir.

    ben şöyle tanımlanmış bir Business sınıf varsayıyoruz: Sonra

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

    : Hiçbir alan gömülü virgül içerdiğini tahmin ediyorum

    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); 
    } 
    

    Not.