【问题标题】:LINQ to XML selecting next node ElementsLINQ to XML 选择下一个节点元素
【发布时间】:2013-04-05 20:26:04
【问题描述】:

我正在从 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 + "";
        }

我的问题是,目前我正在从“列”获取所有数据,我只从“列”中获取 &lt;variable name="currentSession"&gt; 范围内的数据,但我很难跳过 &lt;row&gt;

谁能帮我弄清楚如何跳过行节点。

【问题讨论】:

    标签: xml linq linq-to-xml


    【解决方案1】:

    我想你应该先取你的“变量”,用“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"));
    

    【讨论】:

      【解决方案2】:

      你的问题不是很清楚,但我认为你只是想要:

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        相关资源
        最近更新 更多