2013-03-20 2 views
0

LINQ 기술을 사용하여 xml 파일을 검색하려고하지만 몇 가지 어려움이 있습니다. 나는 속성 값과 약간의 검색 조건과 모든 차일을 찾을 싶습니다LINQ 여러 수준의 특성 검색

(구조화 된 데이터)는 다음과 같습니다

내 XML : 내가 좋아하는 것 LINQ와 함께

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<LanguageMenu> 
    <Menu language="English" name ="Menu" numOfMenus="1"> 
     <MainItem ID="e_mnuMain1" name="File" level="0"></MainItem> 
     <MainItem ID="e_mnuMain2" name="Edit" level="0"></MainItem> 
     <MainItem ID="e_mnuMain3" name="Query" level="0"></MainItem> 
     <MainItem ID="e_mnuMain4" name="Traffic" numOfSubItem="4" level="0"> 
      <SECOND name="Vendors" value="FIN3010" level="1" father="3"></SECOND> 
      <SECOND name="Buyers" value="FIN3020" level="1" father="3" ></SECOND> 
      <SECOND name="General ledger" value="FIN3030" level="1" father="3"></SECOND> 
      <SECOND name="Accounts" value="FIN3040" level="1" father="3"> 
       <THIRD name="Home Accounts" value="FIN3010" level="2" father="5" grantfather="3"/> 
       <THIRD name="Foreign accounts" value="FIN3050" level="2" father="5" grantfather="3"/> 
      </SECOND> 
     </MainItem> 
    </Menu> 
</LanguageMenu> 

이 요소로 시작하는 모든 어린이를 찾기 위해 달성하기 위해 값이 FIN3010 인 MainItem. 내 XML을 기준으로 공급 업체 및 홈 계정을 반환해야합니다.

XElement xelement = XElement.Load("../../xmlFile"); 
var x = from a in xelement.Descendants("SECONDS") 
     where a.Attribute("value") != null 
     && (string)a.Attribute("value").Value.ToUpper() == txtSifra.Text.ToUpper() 
     select a; 
foreach (XElement xEle in x) 
{ 
    //TODO 
} 

답변

0
: 나는이 코드 조각 stucked 한

Traffic - Vendors 
Traffic - Accounts - Home Accounts 

: 그래서 출력은 내가 이렇게 될 것이다 달성하고자하는

나는 또한 그의 childer의 부모를 좀하고 싶습니다

이것에 대해 어떻게 :

var x = from a in xelement.Descendants("MainItem") 
          .Descendants() 
     where a.Attribute("value") != null && 
       a.Attribute("value").Value 
            .Equals(txtSifra.Text, 
              StringComparison.InvariantCultureIgnoreCase) 
     select a; 
foreach (XElement xEle in x) 
{ 
     // items will contain all nodes (inclusive) between MainItem and xEle 
     var items = xEle.AncestorsAndSelf() 
         .Where(x1 => x1.AncestorsAndSelf("MainItem") 
             .Any()) 
         .OrderBy(x1 => x1.Ancestors().Count()); 
     var names = items.Attributes("name").Select(a => a.Value).ToArray(); 
     Console.WriteLine(string.Join(" - ", names)); 
} 

이의 출력은 다음과 같습니다

Traffic - Vendors 
Traffic - Accounts - Home Accounts 
+0

예, 작동 중입니다. 어떻게하면 모든 어린이의 부모님을 얻을 수 있는지 말해주십시오. – Igor

+0

방금 ​​추가했습니다. – JLRishe

+0

아니요 - 내가 원하는 것이 아닙니다. 이 코드 조각은 발견 된 항목의 TAG를 반환하고이 항목이있는 전체 'MainItem'태그를 반환합니다. 나는 자녀와 부모의 '교통 - 판매 인'- 이름 속성을 내게주고 싶다. – Igor