2011-11-08 50 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