LINQ to XML选择下一个节点元素

时间:2013-04-05 12:20:05

标签: xml linq linq-to-xml

我正在从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 to 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">范围内“列”中的数据,但是我很难跳过{{1} }

任何人都可以帮我弄清楚如何跳过行节点。

2 个答案:

答案 0 :(得分:0)

我想你应该先取“变量”,用“where”过滤它,然后取出它的行和列元素:

  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"));

答案 1 :(得分:0)

你的问题并不十分明确,但我你只想要:

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

请注意,假设始终存在名为“CurrentSession”的单个 variable元素,并且您实际上只需要每行第一列的值。

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