2009-09-01 22 views
3

xmlファイルから値を読み取る際に問題が発生しています。ここで はxmlファイルである:以下に示す機能付きLinqでxmlファイルから値を読み取る

<root> 
    <defaultGroups name="Sikker"> 
     <group name="0ASK" /> 
     <group name="0ASKAPP" /> 
     <group name="0ASKFELLES" /> 
     <group name="0SYSAPP" /> 
     <group name="0SYSAPPoffice" /> 
     <group name="10WTS" /> 
    </defaultGroups> 
    <defaultGroups name="Intern"> 
     <group name="11WTS" /> 
     <group name="1ASK" /> 
     <group name="1ASKAPP" /> 
     <group name="1ASKFELLES" /> 
     <group name="Domain Users" /> 
     <group name="Askvoll brukere" /> 
     <group name="1SYSAPP" /> 
     <group name="1SYSAPPAdobeReader" /> 
     <group name="1SYSAPPEXCEL" /> 
     <group name="1SYSAPPIEXPLORER" /> 
     <group name="1SYSAPPOUTLOOK" /> 
     <group name="1SYSAPPPOWERPOINT" /> 
     <group name="1SYSAPPWORD" /> 
    </defaultGroups> 
</root> 

、私だけ<defaultGroups name="Sikker">から値を読みになっています。私は最初の値を取得します: "0ASK"、しかし残りはありません。誰かがこれで私を助けてくれますか?

public string GetSikkerSoneDefaultGroups(string companyName) 
    { 
     string sikkerSone = ""; 

     XDocument doc = XDocument.Load("xml\\defaults\\" + companyName + ".xml"); 
     var groups = from defaultGroups in doc.Descendants("defaultGroups") 
        where defaultGroups.Attribute("name").Value == "Sikker" 
        select new 
        {        
         g = defaultGroups.Element("group").Attribute("name").Value 
        }; 

     foreach (var group in groups) 
     { 
      sikkerSone += group.g + ";"; 
     } 

     doc = null; 

     return sikkerSone; 

    } 

答えて

2

あなたが使用している:のみdefaultGroupsの最初の子要素を選択し

g = defaultGroups.Element("group").Attribute("name").Value 

これは私が使用するC#関数である

(私は、LINQのに新たなんです)。私はこれをかなり単純化することができると思います。あなたがそれに近づいているように、サブクエリが必要です。グループの要素を直接取得してみませんか?

+0

var groups = from defaultGroup in doc.Descendants("group") where defaultGroup.Parent.Attribute("name").Value == "Sikker" select defaultGroup.Attribute("name").Value; // Make it into a string foreach (var group in groups) { sikkerSone += group + ";"; } 
はあなたに非常に多くのwompをありがとうございました!これは私が欲しかった通りに正確に働いた:) パーフェクト! –

0
string sikkerSone = string.Join(";", 
    (from dg in doc.Descendants("defaultGroups") 
    where dg.Attribute("name") == "Sikker" 
    from g in dg.Elements("group") 
    select (string)g.Attribute("name")) 
    .ToArray()); 
関連する問題