2014-02-19 2 views
0

Xml1을 XmlDocument를 사용하여 차이를 얻으려면 : -두 개의 서로 다른 XML을 innertag 값을 비교하고

<Demo name="Demo" MoneyFormat="" Type="" PricingCountry="IND" PricingCurrency="UD" PricingTerm="DP" PricingLang="99" > 
    <Part ProductId="XFY-12" PartNumber="328806" Price="0.05" Description="ABCDE" /> 
    <Part ProductId="MER-14" PartNumber="328807" Price="0.85" Description="FGHIJ" /> 
    <Part ProductId="MEM-24" PartNumber="328808" Price="72.87" Description="KLMN" /> 
</Demo> 

Xml2 : - 위의 두 개의 서로 다른 XML 파일에

<list version="1.0"> 
    <category name="XYZ" psmax="0" idle="15" max="10"> 
    <imagename>sample.gif</imagename> 
    <chassis partnumber="328806">DellInspiron</chassis> 
    <ComponentCollection> 
     <component type="Processors" rel="OR" maxprocessors="2" minprocselect="1"> 
     <item type="Quad Core"> 
      <citem partnumber="328807" value="ABC" idle="11" max="70" maxselect="2" /> 
      <citem partnumber="667421" value="DEF" idle="11" max="70" maxselect="2" /> 
     </item> 
     <item type="Six Core"> 
      <citem partnumber="667376" value="GHE" idle="15" max="85" maxselect="2" /> 
      <citem partnumber="667375" value="HIJ" idle="14" max="92" maxselect="2" /> 
      <citem partnumber="667424" value="KLM" idle="14" max="64" maxselect="2" /> 
      <citem partnumber="328808" value="NOP" idle="16" max="106" maxselect="2" /> 
     </item>   
     </component> 
</ComponentCollection> 
</category> 
</list> 

, 내가 원하는 Ist Xml의 모든 PartNumber를 IInd Xml과 비교하고 일치하지 않는 PartNumber를 표시하십시오. 나는 C# 및 XmlDocument 초보자입니다, 어떤 도움이나 힌트를 주시면 감사하겠습니다. 첫 번째 파일에 존재하지만 second.If에 존재하지 당신이 원하는 어떤 PartNumber가 없기 때문에

+0

이 문제를 해결하는 방법에는 여러 가지가 있습니다. 빠르게 떠오르는 한 가지 방법은 "기본"데이터에 해시 테이블을 만들고 해시 테이블에 대한 조회를 수행하여 일치하는 것을 찾는 것입니다. 일치하지 않는 레코드의 경우 "일치하지 않는"배열로 밀어 넣습니다. 그래도 좀 더 우아한 접근법이 있다고 확신합니다. – Newse

답변

0

먼저 LINQ to XML 모든 PartNumbers 다음 비어 파일의 내용 결과에 따르면 Except 방법을

var list1 = XDocument.Load("firstpath") 
      .Descendants() 
      .SelectMany(x => x.Attributes()) 
      .Where(x => x.Name == "PartNumber") 
      .Select(x => (string)x); 
var list2 = XDocument.Load("secondpath") 
      .Descendants() 
      .SelectMany(x => x.Attributes()) 
      .Where(x => x.Name == "partnumber") 
      .Select(x => (string)x); 

var result = list1.Except(list2); 

을 사용하여 얻을 그 반대 사용하십시오 list2.Except(list1)

+0

고마워, 같은 XmlDocument를 사용하여 수행 할 수 있습니까? – user3265656