2013-06-06 1 views
-1

그래서 저는 Dictionary of Users와 ControlNumbers를 가져 와서 XML로 출력하는 다음과 같은 기능을 가지고 있습니다. 이 작업을 아주 잘 수행 한 온라인 LINQ를 찾았습니다. 하지만 작은 문제가 하나 있습니다.XML 사전

<root> 
    <adolan>792365</adolan> 
    <afeazell>791964</afeazell> 
    <amsmith>790848</amsmith> 
    <asnyder>790948789358</asnyder> 
</root> 

을하지만 당신이 볼 수 있듯이, ControlNumbers는 (단이 경우 항상하지 않습니다) 일반적으로 6 자리입니다

static Dictionary<string, User> UserClassDict = new Dictionary<string, User>(); 
    static void DictionaryToXML(Dictionary<string,User> UserClassDict) 
     { 
      XElement el = new XElement("root", UserClassDict.Select(kv => new XElement(kv.Key, kv.Value.ControlNumber 

))); 
     } 

XML은 다음과 같습니다. 제가하고 싶은 것은 이것과 비슷한 것입니다.

<root> 
<adolan> 
<controlNumbers>123456</controlNumbers> 
</adolan> 
<asnyder> 
<controlNumbers>222111</controlNumbers> 
<controlNumbers>333222</controlNumbers> 
</asnyder> 
</root> 

결국 나는 프로그램이 시작에서이 XML 파일을 읽고 사전 그래서이 XML 결국 꽤 큰 얻을 것이다 채울 수있을 것이다. 어떤 아이디어라도 도움이 될 것입니다.

+0

을 시도 사용하여 연결하는? –

+0

ControlNumbers는 USER 클래스의 목록에 저장됩니다. 그래서, 귀하의 질문을 이해하면, 그들은 사용자 클래스 안에있는 목록 안에 저장됩니다. – MaylorTaylor

+0

사이드 노트 : XML 스키마가 차선책 (혹은 간단하지 않음)입니다 : 사용자 이름을 노드 이름으로 사용하면 길을 잃을 때 많은 고통을 줄 수 있습니다 (ASCII가 아닌 이름 ...) - 대신 속성을 고려하십시오. 목록을 쉼표로 구분 된 문자열로 직렬화하는 것은 데이터를 본질적으로 두 번 구문 분석해야하므로 편리하지 않습니다. 한 번 XML로, 둘째로 문자열의 시퀀스로 요소의 순서가 더 좋을 수 있습니다. –

답변

2

XElement el = new XElement("root", 
     UserClassDict.Select(kv => new XElement(kv.Key, 
     kv.Value.ControlNumbers.Select(num => new XElement("controlNumbers", num)))) 
); 
+0

PERFECT! 고맙습니다! 나는 정말로 내가 가지고있는이 LINQ 책을 읽을 필요가있다. – MaylorTaylor

0

두 개 이상의 제어 x 호가 사전에 표시되는 f}을 완전히 이해하지 못했지만 더 복잡한 xlm 생성을 원할 경우 람다를 변경하여 메소드를 호출 할 수 있습니다.

kv => new XElement(kv.Key, kv.Value.ControlNumber) 

kv => BuildXMLElement(kv) 

로 변경 것입니다 그리고 당신은 만들 것이다

XElement el = new XElement("root", UserClassDict. 
      Select(kv => new XElement(kv.Key, 
       from it in kv.Value.ControlNumber 
       select new XElement("controlNumbers", it) 
       ))); 

위의 LINQ 쿼리에 엘을 당신이

0

을 원하는대로 요소를 구축 변경하는 BuildXMLElement을 구현할 수 있습니다 여러 controlNumbers 태그

이 사전에 표시되는 방법

은 사용자가 두 개 이상의 controlNumbers이있는 경우

XElement el = new XElement("root", UserClassDict. 
      Select(kv => new XElement(kv.Key, 
       String.Join(",", kv.Value.ControlNumber.ToArray()) 
       )));