2010-11-19 27 views
0

xml çıkışı gibi gereksinimlerime göre iterasyon elemanları (Sinyal) eklemek istiyorum. XML dosyası ile yinelerler eleman eklemek için nasıl kod yukarıdanC# .net kullanarak XMl dosyasında yineleme öğesi nasıl eklenir?

   XDocument xdco = new XDocument(
       new XDeclaration("1.0", "utf-8", "Yes"), 
       new XComment("WIU Configurations"), 
       new XElement("WIUConfig", 
        new XElement("Timestamp", datetime), 
        new XElement("WIUAddress", ds.Tables[0].Rows[0][0].ToString()), 
        new XElement("WIUName", ds.Tables[0].Rows[0][1].ToString()), 
        new XElement("BeaconFlag", "Y"), 
        new XElement("EncryptedHMACkey", ds1.Tables[0].Rows[0][0].ToString()), 
        new XElement("DeviceStatusConfigSCAC", ds.Tables[0].Rows[0][0].ToString()), 
        new XElement("DeviceStatusConfigTableId", ds.Tables[0].Rows[0][0].ToString()), 
        new XElement("DeviceStatusConfigVersion", ds.Tables[0].Rows[0][0].ToString()), 

        **????????(iteration code) ** 

        )); 

xdco.Save(OutPath); 

i XML

İşte

C# .net LINQ kullanarak bu iterasyon kavramları başarmak nasıl

<?xml version="1.0" encoding="UTF-8"?> 
    <WIUConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
     <Timestamp>2006-05-04T18:13:51.0Z</Timestamp> 
     <WIUAddress>WIUAddress0</WIUAddress> 
     <WIUName>WIUName0</WIUName> 
     <BeaconFlag>Y</BeaconFlag> 
     <EncryptedHMACkey>30</EncryptedHMACkey> 
     <DeviceStatusConfigVersion>DeviceStatusConfigVersion0</DeviceStatusConfigVersion> 
     <Signal> 
     <SiteDeviceId>SiteDeviceId0</SiteDeviceId> 
     <SiteName>SiteName0</SiteName> 
     <TrackName>TrackName0</TrackName> 
     </Signal> 
     <Signal> 
     <SiteDeviceId>SiteDeviceId1</SiteDeviceId> 
     <SiteName>SiteName1</SiteName> 
     <TrackName>TrackName1</TrackName> 
     </Signal> 
     <Signal> 
     . 
     . 
     . 
     </Signal> 
    </WIUConfig> 

benim Kod olduğu ?

+0

Sinyalleriniz bir çeşit koleksiyonda mı? –

+0

bu kodu kullanarak çözümlendi: for (int i = 0; i Jeyavel

cevap

1

Sen sinyal verileri açısından ne var olmadığını göstermiştir, ancak nihai mevcut new XElement satırdan sonra doğrudan, böyle bir şey yapmak mümkün olmalıdır: XML

signals.Select(signal => new XElement("Signal", 
    new XElement("SiteDeviceId", signal.SiteDeviceId), 
    new XElement("SiteName", signal.SiteName), 
    new XElement("TrackName", signal.TrackName) 
)) 

LINQ olduğunu yinelenebilir hale gelen parametreler üzerinde tekrarlamaya yetecek kadar akıllıdır. LINQ'un geri kalanıyla çok güzel bir şekilde bütünleştiği yollardan biri.

DÜZENLEME: Yorumlarınıza bakarak, verileriniz zaten var ancak bir DataTable. Yine de aynı yaklaşımı DataTable.AsEnumerable().Select(row => ...) kullanarak uygulayabilirsiniz, ancak kişisel olarak kodun basit ve sürdürülebilir olmasını sağlamak için öncelikle güçlü bir şekilde yazılan koleksiyona dönüştürmeyi düşünebilirim.

+0

Teşekkürler Jon Skeet ... – Jeyavel

0

Aradaki "İş nesneleri" nin bir ara koleksiyonu oluşturabilir ve daha sonra onu serileştirmek için sadece DataContractSerializer'ı kullanabilirsiniz.

İlgili konular