2011-11-08 73 views
1

有這樣一個XML文件:問題與LINQ到XML

<Datasets> 
    <package id="AD"> 
    <iff>LRC_AD_AMSADTEXPDR</iff> 
    </package> 
    <package id="AL"> 
    <iff>LRC_AL_CLINICALTCODE</iff> 
    <iff>LRC_AL_PATALGHISTRY</iff> 
    <iff>LRC_AL_PATALGYCODE</iff> 
    <iff>LRC_AL_PATALLERGY</iff> 
    <iff>LRC_AL_PATALRGYCHEKD</iff> 
    </package> 
    <package id="AT">  
    <iff>LRC_AT_PATALERT</iff> 
    <iff>LRC_AT_PATALRTCARE</iff> 
    <iff>LRC_AT_PATALRTCODE</iff> 
    <iff>LRC_AT_PATALRTDIST</iff> 
    <iff>LRC_AT_PATALRTHIST</iff> 
    <iff>LRC_AT_PATALRTSTAT</iff> 
    </package> 
    <package id="CDC"> 
    <iff>LRC_CDC_IFMFMCOMMENT</iff> 
    <iff>LRC_CDC_IFMFORM</iff> 
    <iff>LRC_CDC_IFMFRMCNTXT</iff> 
    <iff>LRC_CDC_IFMFRMDATA</iff> 
    <iff>LRC_CDC_IFMFRMDISDET</iff> 
    <iff>LRC_CDC_IFMFRMHIMREF</iff> 
    <iff>LRC_CDC_IFMFRMKEYWRD</iff> 
    <iff>LRC_CDC_IFMFRMOBSRER</iff> 
    <iff>LRC_CDC_IFMFRMPLCY</iff> 
    <iff>LRC_CDC_IFMFRMRCPNT</iff> 
    <iff>LRC_CDC_IFMFRMREF</iff> 
    <iff>LRC_CDC_IFMFRMSTAHST</iff> 
    </package> 
    </Datasets> 

我用.NET 3.5創建的應用程序,這將有一個組合框和一個CheckedListBox控件。 在選擇哪個相應的iff元素應該被綁定到checkedlistbox時,組合框將列出所有包(如AD,AL,AT等)。

我成功地與下面的代碼結合的組合框:

var pkgs = from s in xmlDoc.Descendants("package") 
         where s.HasAttributes && s.Attribute("id") != null && 
         !String.IsNullOrEmpty(s.Attribute("id").Value) 
         select s.Attribute("id").Value; 

      List<string> lst = pkgs.ToList(); 

      comboBox1.DataSource = lst; 

當用戶從下拉菜單中選擇該程序包,在組合框的selectedIndexChange事件,我想retieve那個包的相應子元素,並將其綁定到選中列表框。

但是,我無法使用LINQ選擇所選包的子節點(iffs)。

任何幫助,非常感謝!

感謝

回答

0

LINQ的語法來檢索 「IFFS」 可能是這樣的:

var package = xmlDoc.Descendants("package").SingleOrDefault(s => s.HasAttributes && s.Attribute("id") != null && s.Attribute("id").Value == myPackage); // myPackage is the selected package 

if (package == null) 
    return null; 

return package.Descendants("iff").Select(x => x.Value); 

是你在找什麼?

+0

@Sathya如果你喜歡的答案不要忘記upvote它;) – PierrOz