2013-02-20 2 views
4

기본적으로 두 개의 XML 문서를 읽습니다. 첫 번째 매개 변수에는 이름과 값이라는 두 가지 값이 저장되어 있어야합니다. 두 번째 값에는 Name, DefaultValue, Type 및 Limit의 네 가지 값이 있습니다. 문서에서 읽을 때, 나는 각각을 어떤 객체에 저장하고 싶다. 그런 다음 두 개의 객체를 5 개의 값이 저장된 객체로 결합 할 수 있어야합니다. XML 문서는 길이가 다르지만 두 번째 문서는 항상 첫 번째 문서의 크기가됩니다.두 개의 객체를 키에 결합하려면 어떻게해야합니까?

예 :

<XML1> 
    <Item1> 
    <Name>Cust_No</Name> 
    <Value>10001</Value> 
    </Item1> 
    <Item4> 
    ITEM4 NAME AND VALUE 
    </Item4> 
    <Item7> 
    ITEM 7 NAME AND VALUE 
    </Item7> 
</XML1> 

<XML2> 
    <Item1> 
    <Name>Cust_No</Name> 
    <DefaultValue></DefaultValue> 
    <Type>varchar</Type> 
    <Limit>15</Limit> 
    </Item1> 
    6 MORE TIMES ITEMS 2-7 
</XML2> 

이미 코드가 XML 통해 반복합니다. 필자는 데이터를 저장하는 가장 좋은 방법에 대해 생각할 필요가 있습니다. 궁극적으로 이름 키의 두 객체를 조인 할 수 있어야합니다. 내가 string[]arrayList[]을 시도했지만, 나는 그것들을 조합하는 데 어려움을 겪었다. 나는 또한 Dictionary을 읽었지만 그 구현에도 어려움이있었습니다 (전에는 Dictionary을 사용한 적이 없습니다).

답변

2

Linq to Xml 쿼리는 두 개의 XDocument를 결합하고 조인 된 항목에 대한 익명 개체를 선택합니다. 각 개체는 다섯 개 가지 속성을 갖습니다 다음과 같이 생성

var query = 
    from i1 in xdoc1.Root.Elements() 
    join i2 in xdoc2.Root.Elements() 
     on (string)i1.Element("Name") equals (string)i2.Element("Name") into g 
    let j = g.SingleOrDefault() // get joined element from second file, if any 
    select new { 
     Name = g.Key, 
     Value = (int)i1.Element("Value"), 
     DefaultValue = (j == null) ? null : (string)j.Element("DefaultValue"), 
     Type = (j == null) ? null : (string)j.Element("Type"), 
     Limit = (j == null) ? null : (string)j.Element("Limit") 
    }; 

XDocuments : 쿼리의

var xdoc1 = XDocument.Load(path_to_xml1); 
var xdoc2 = XDocument.Load(path_to_xml2); 

사용법 :

foreach(var item in query) 
{ 
    // use string item.Name 
    // integer item.Value 
    // string item.DefaultValue 
    // string item.Type 
    // string item.Limit 
} 
+1

감사합니다! 이것은 위대합니다. 하지만 지금 데이터에 어떻게 액세스합니까? 저장된 내용은 무엇입니까? –

+0

@IanBest 보류 중, 샘플을 업데이트하겠습니다. –

관련 문제