2010-11-19 4 views
0

필자는 아래 요구 사항에 따라 xml 출력과 같은 반복 요소 (신호)를 삽입하려고합니다. XML 파일로 반복 처리 요소를 삽입하는 방법을 위의 코드에서C# .net을 사용하여 XMl 파일에 반복 요소를 삽입하는 방법은 무엇입니까?

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

: 내가 XML

여기

에 C# .NET을의 LINQ를 사용하여이 반복 개념을 achive 수있는 방법을

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

내 코드입니다 ?

+0

신호가 어떤 종류의 컬렉션에 있습니까? –

+0

이 코드를 사용하여 해결 : for (int i = 0; i Jeyavel

답변

1

당신은 신호 데이터의 관점에서 뭘 찾았는지 표시하지 않은,하지만 당신은 당신의 최종 기존 new XElement 줄 끝에서 직접 이런 일을 할 수 있어야한다 : XML에

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

LINQ는 iterable 인 것으로 판명 된 매개 변수를 재귀 할만큼 충분히 영리하다. LINQ의 나머지 부분과 매우 잘 통합되는 방법 중 하나입니다.

편집 : 의견에 따라 판단 할 때 이미 데이터가 있지만 데이터 테이블에 있습니다. 당신은 여전히 ​​DataTable.AsEnumerable().Select(row => ...)을 사용하여 같은 접근법을 적용 할 수 있지만 개인적으로 강력하고 형식화 된 컬렉션으로 변환하여 코드를 간단하고 유지하기 쉽도록 강력하게 고려할 것입니다.

+0

고맙습니다 Jon Skeet ... – Jeyavel

0

"비즈니스 개체"의 중간 컬렉션을 만든 다음 DataContractSerializer를 사용하여이를 직렬화 할 수 있습니다.

관련 문제