2013-04-05 90 views
0

我正在從XML文檔中選擇一些specfic數據。LINQ to XML選擇下一個節點元素

這裏是XML文檔的樣本:

<data> 
<variable name="somedata"> 
<row> 
    <column>data</column> 
    <column>data</column> 
    <column>data</column> 
    <column>data</column> 
    <column>data</column> 
    <column>data</column> 
    </row> 
</variable> 
<variable name="CurrentSession"> 
    <row> 
    <column>data I what to get</column> 
    <column>data I what to get</column> 
    <column /> 
    </row> 
    <row> 
    <column>data I what to get</column> 
    <column>data I what to get</column> 
    <column /> 
    </row> 
</variable> 
</data> 

我決定使用LINQ做它的XML。

這是我到目前爲止有:

 var doc = XDocument.Load(@"D:\CurrentSession.xml"); 
     var query = from d in doc.Descendants("row") 
        //where (string)d.Attribute("name") == ("CurrentSession") 
        select (string)d.Element("column"); 
     foreach (string name in query) 
     { 
      string xml = "test : " + name + ""; 
     } 

我的問題是,在目前我'從「列」讓所有的數據,我只從什麼「列」的<variable name="currentSession">範圍內的數據但我有困難跳過<row>

任何人都可以幫助我搞清楚如何跳過行節點。

回答

0

,我想你應該首先把你的「變量」,由「在那裏」過濾器,然後取它的行和列的元素:

var doc = XDocument.Load(@"D:\CurrentSession.xml"); 
    var query = (from d in doc.Descendants("variable") 
       where (string)d.Attribute("name") == "CurrentSession" 
       select d.Elements("row")).First().Select(row => row.Element("column")); 
+0

謝謝,那工作:) – ChristianJuul 2013-04-05 12:43:23

0

你的問題並不十分清楚,但我覺得你只是想:

var query = doc.Descendants("variable") 
       .Where(v => (string) v.Attribute("name") == "CurrentSession") 
       .Single() 
       .Elements("row") 
       .Select(row => (string) row.Element("column")); 

需要注意的是,它假定總是以「CurrentSession」的名稱variable元素,那你真的只想值f或每行的第一列。

如果這不是你所需要的,你需要在你的問題上更清楚。