Linq to XML,选择给定节点的所有属性及其值

2023-12-14

我有一个 xml 映射文件,看起来像这样

<colourMappings>
    <model name="modelX">
        <mapping colour="White" configCode="1"></mapping>
        <mapping colour="Aluminium" configCode="2"></mapping>
        <mapping colour="Black" configCode="3"></mapping>
        <mapping colour="Blue" configCode="4"></mapping>
        <mapping colour="White Pearl" configCode="5"></mapping>
        <mapping colour="Graphite" configCode="6"></mapping>
        <mapping colour="Gunmetal" configCode="7"></mapping>
        <mapping colour="Indigo" configCode="8"></mapping>
        <mapping colour="Red" configCode="9"></mapping>
    </model>
    <model name="modelY">
        <mapping colour="White" configCode="1" stConfigCode= "xx" dgConfigCode="hj"></mapping>
        <mapping colour="Aluminium" configCode="2" stConfigCode= "xy" dgConfigCode="gh"></mapping>
        <mapping colour="Black" configCode="3" stConfigCode= "xt" dgConfigCode="fg"></mapping>
        <mapping colour="Blue" configCode="4" stConfigCode= "sd" dgConfigCode="fg"></mapping>
        <mapping colour="White Pearl" configCode="5" stConfigCode= "df" dgConfigCode="df"></mapping>
        <mapping colour="Graphite" configCode="6" stConfigCode= "xc" dgConfigCode="df"></mapping>
        <mapping colour="Gunmetal" configCode="7"  stConfigCode= "cv" dgConfigCode="cv"></mapping>
        <mapping colour="Indigo" configCode="8"  stConfigCode= "zx" dgConfigCode="vb"></mapping>
        <mapping colour="Red" configCode="9"  stConfigCode= "fg" dgConfigCode="cv"></mapping>
    </model>
</colourMappings>

我希望能够在给定模型名称和颜色的情况下提取所有属性及其值

e.g.

给定 ModelY 和 White,我想得到 configCode="1" stConfigCode= "xx" dgConfigCode="hj" 这可以是任何结构 - 数组、列表等

我一直在使用 Linq to XML 但无法获得正确的语法

XDocument mappings = XDocument.Load(@"D:\colour_mappings.xml");
var q = from c in mappings.Descendants("model")
                    where (string)c.Attribute("name") == "modelY" && (string)c.Descendants("mapping").Attributes("colour").FirstOrDefault() == "White"
                    select c.Attributes();

有人知道怎么做吗?

乐意使用任何方法,不一定非得是 Linq


Update

总结为一个方法:

public IEnumerable<XAttribute> GetAttributes(string modelName, string colour)
{
    XDocument mappings = XDocument.Load(@"D:\colour_mappings.xml");

    var q1 =
        from elm in mappings.Descendants("model")
        where (string)elm.Attribute("name") == "modelY"
        select elm;

    var q2 =
        from elm in q1.Descendants("mapping")
        where (string)elm.Attribute("colour") == "White"
        select elm.Attributes().Where(a => a.Name != "colour");


    foreach (IEnumerable<XAttribute> attributeList in q2)
    {
        foreach (XAttribute attribute in attributeList)
        {
            yield return attribute;
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linq to XML,选择给定节点的所有属性及其值 的相关文章

  • Linq.Select() 中的嵌套表达式方法调用

    I use Select i gt new T 每次手动点击数据库后将我的实体对象转换为 DTO 对象 以下是一些示例实体和 DTOS 用户实体 public partial class User public int Id get set
  • 基于 AST 结合使用 And Or 和 Not 表达式的 C# 表达式

    我想使用 Linq 表达式来实现一些动态功能 我需要 And Or 和 Not 表达式 我无法得到太多 我们想要检查系统中是否启用了某些功能 并据此决定是否显示菜单项 我们已经形成了 XML 格式的规则 我知道将规则转换为 AST 但我不知
  • 按不同日期拆分列表

    希望还有一个简单的 假设我有一个这样的集合 List
  • 在 Select 语句中调用表达式 - LINQ to Entity Framework

    我正在尝试使用我在尝试执行 select 子句时创建的现有表达式构建类 但我不确定如何将表达式附加到 Select 的表达式树 我尝试执行以下操作 var catalogs matchingCatalogs Select c gt new
  • 使用 AutoMapper 进行 LINQ GroupBy 聚合

    试图让查询工作 但老实说不确定如何 或者是否可能 进行它 因为我尝试过的一切都不起作用 共查询6个表 Person PersonVote PersonCategory Category City FirstAdminDivision Per
  • 为什么我不能在扩展 List 的类中调用 OrderBy?

    我有一堂课 Deck 其中包含一个名为的方法Shuffle 我正在致力于重构Deck延长List
  • 更高效的 LINQ 查询

    有人可以帮我将此查询循环变成高效的 Linq 查询吗 我将其加载到 TreeView 中 因此必须附加每个项目 包含也非常低效 延迟加载项目也不起作用 事实上 这个查询访问数据库的次数比应有的要多 public IQueryable
  • 将一个 IEnumerable 拆分为多个 IEnumerable

    我是 linq 新手 我需要根据指示器将 Couple string text bool Indicator 类型的 IEnumerable 拆分为多个 IEnumerable 我尝试使用skipWhile 和 TakeWhile 但没有找
  • LINQ-To-SQL 如何防止 SQL 注入?

    我目前正在使用 C 和 LINQ TO SQL 做一个项目 这个项目将安全性作为高优先级 所以显然我想防止 SQL 注入 我用谷歌搜索了此事 但 没有发现任何有用的信息 微软自己的常见问题解答告诉我 由于 LINQ 处理参数的方式 注入不会
  • Linq 表达式将 DataTable 转换为 > 的字典

    我正在尝试转换以下形式的数据表 Key Value 1 A 1 B 1 C 2 X 2 Y 到字典 1 A B C 2 X Y 我使用的 lambda 表达式是 GetTable sql AsEnumerable Select r gt n
  • 使用表达式树构造 LINQ GroupBy 查询

    我已经在这个问题上坚持了一个星期了 但没有找到解决方案 我有一个像下面这样的 POCO public class Journal public int Id get set public string AuthorName get set
  • LINQ 中的延迟执行有什么好处?

    LINQ 使用延迟执行模型 这意味着在调用 Linq 运算符时不会返回结果序列 而是这些运算符返回一个对象 然后仅当我们枚举该对象时 该对象才会生成序列的元素 虽然我了解延迟查询的工作原理 但我在理解延迟执行的好处时遇到了一些困难 1 我读
  • 如何在 VS 2013 的立即窗口中执行 LINQ 和/或 foreach?

    在调试过程中探测当前状态时 立即窗口是非常有用的工具 我了解到 通过使用问号 人们可以在那里做更多的事情 如图所示在这篇文章中 https stackoverflow com questions 32934635 execute metho
  • Linq 选择与另一个表中的 ID 相等的项目

    我不确定这怎么可能 但我有两个表 我想通过表 1 的值从表 2 中获取值 表 1 有一个名为 rank 的外键 它是int 表 2 有一个名为 name 的值 它是string 现在表 1 的 排名 与表 2 的 ID 相关 所以当我说 v
  • 过滤项目来源

    通过此代码 我设置了数据网格的 ItemsSource 不过 我有更多的 wpf 控件来过滤数据网格 例如从时间范围过滤数据网格 我可以为此编写一个新查询 但这似乎没有必要 因为数据已经可用 我只需要过滤它 最好的方法是什么 我能得到的任何
  • LINQ 中“最受欢迎”的 GROUP BY?

    假设有一个标签表 例如 stackoverflow 问题标签 TagID bigint QuestionID bigint 标签 varchar 使用 LINQ 获取 25 个最常用标签的最有效方法是什么 在 SQL 中 一个简单的 GRO
  • 如何在嵌套列表视图中编辑数据

    我使用列表视图来显示项目列表 并使用嵌套列表视图来显示每个项目的功能列表 父列表视图和子列表视图都需要能够进行插入 编辑和删除操作 它适用于父列表视图 但是 当我尝试编辑子项目时 编辑按钮不会将其带入编辑模式 您能建议我代码中缺少什么吗
  • 使用 LINQ 获取两个数组中不同和共同的项目

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 例如 我有
  • 实体框架 - 选择特定列并返回强类型而不丢失强制类型转换

    我正在尝试做类似的事情这个帖子 https stackoverflow com questions 1094931 linq to sql how to select specific columns and return strongly
  • 简单的 LINQ 和列表错误:WhereListIterator`1[Task]' 键入 'System.Collections.Generic.List`1[Task]'

    我无法理解我的错误 Method public List

随机推荐