【问题标题】:LINQ to XML: Defer selection of children in Silverlight C#?LINQ to XML:在 Silverlight C# 中推迟选择子项?
【发布时间】:2009-06-01 17:51:55
【问题描述】:

我将以下 XML 文档加载到 C# Silverlight 中:

<parent>
    <son name="Jim">
        <grandson>Billy</grandson>
        <granddaughter>Sue</granddaughter>
    </son>
    <daughter name="Sally">
    </daughter> 
</parent>

我想做一个 LINQ 查询,以便查询父节点并仅获取“儿子”和“女儿”节点的列表。当我到达“儿子”类型的节点时,我想对其自己的孩子进行另一个查询。

我试过了:

 IEnumerable<XElement> Children =
                    from childNode in parents.Descendants()
                    select (XElement)childNode ;

foreach(XElement childNode in Children){
// other code 
}

但这给了我一切(儿子、女儿、孙子、孙女)。

我想做的是这样的:

  foreach(XElement childNode in Children){
    switch(childNode.Name.ToString()){
         case "son": 
            // look for "grandson" and "granddaughter" as children of "son" now
            break;
        case "daughter":
           // don't look for anything
           break;
        }
    }

所以基本上,我只想要查询中返回的第一级子级,稍后我会查询其余的。

我不确定是否应该在原始 LINQ 查询、foreach 条件或什么中完成。我无法控制 XML 文档格式,因此无法将其更改为更好的格式。谢谢!

【问题讨论】:

  • 我想我会为 XML 使用不同的标签,所以除非这是示例数据,否则我会一直使用 应该是 元素或其他东西,然后只是 等等。

标签: c# xml linq silverlight


【解决方案1】:

如果我正确理解您的问题,您需要使用Elements 函数:

            var sons_qry = from son in parents.Elements()
                      select son;

            var grandsons_qry = from grandson in sons_qry.Descendants()
                                select grandson;

【讨论】:

    猜你喜欢
    • 2016-02-15
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多