2013-04-05 92 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或每行的第一列。

如果这不是你所需要的,你需要在你的问题上更清楚。