如何编写单个 LINQ to XML 查询来迭代所有子元素以及子元素的所有属性?

2023-12-15

我正在开发 asp.net 移动应用程序。我使用 XML 作为数据库。我正在 .net 中使用 LINQ to XML 查询 XML 以访问所需的元素和属性。我的 XML 文件中有以下部分。

<VALVES>
     <VALVE NAME="PWV">
      <DISPLAY-NAME>
       Production Master Valve
      </DISPLAY-NAME>
      <COMMANDS USE-TEMPLATE="TRUE" TEAMPLATE-NAME="ValveCommands.xml"></COMMANDS>
    </VALVE>
    <VALVE NAME="PMV" >
     <DISPLAY-NAME>
      Production Wing Valve
     </DISPLAY-NAME>
     <COMMANDS USE-TEMPLATE="TRUE" TEAMPLATE-NAME="ValveCommands.xml"></COMMANDS>
    </VALVE>
</VALVES>

在上面的 XML 文件中,我可以使用以下代码动态访问子元素节点“VALVE”及其属性“NAME”,而无需显式指定属性名称。因此,当在子节点“VALVE”中添加任何新属性时,我可以访问它而无需修改现有代码。对于这样的逻辑,我使用以下代码。在下面的代码中,ValvesProperties 是在“Vallves”类中定义的哈希表。

 static int count = 0;
 List<Valves> LstValves = new List<Valves>();

 string AttName = null;
 string AttValue = null;

 XDocument FieldDef = XDocument.Load(@"F:\Shailesh from user OPC\XML\KK3.xml");
 XElement FieldRoot = FieldDef.Element("KK");

 count = FieldRoot.Element("FIELD-DEFINITION").Element("VALVES").Elements("VALVE").Count();
 Valves[] Valveobj = new Valves[count];

 count = 0;

 foreach (var element in FieldRoot.Element("FIELD-DEFINITION").Element("VALVES").Elements())
 {
     Valveobj[count] = new Valves();

     foreach (var attribute in element.Attributes())
     {
         AttName = attribute.Name.ToString();
         AttValue = attribute.Value.ToString();
         Valveobj[count].ValvesProperties.Add(AttName, AttValue);
         LstValves.Add(Valveobj[count]);
     }

     count++;
  }

return LstValves;

上面定义的 XML 部分需要类似的逻辑。在上面的 XML 中,我想编写 LINQ to XML 查询,该查询可以访问“VALVE”节点的 NAME 属性(<VALVE NAME="PWV">),那么它应该访问“DISPLAY-NODE”之间的文本(<DISPLAY-NAME> Production Master Valve </DISPLAY-NAME>),然后它应该动态访问“COMMAND”节点的所有属性(<COMMANDS USE-TEMPLATE="TRUE" TEAMPLATE-NAME="ValveCommands.xml"></COMMANDS>)。所有这些我都想要动态地进行,而无需显式指定子节点的名称及其属性的名称(类似于我编写上述查询的方式)我们可以使用 LINQ to XML 编写这样的代码吗?如果我们可以用单个逻辑编写上述问题的代码(类似于我编写上述查询的方式),那就更好了。您能给我提供可以解决上述问题的任何代码或链接吗?


您可以迭代所有元素并检索每个元素的属性:

var allDescendants = myElement.DescendantsAndSelf();
var allDescendantsWithAttributes = allDescendants.SelectMany(elem =>
    new[] { elem }.Concat(elem.Attributes().Cast<XContainer>()));

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

如何编写单个 LINQ to XML 查询来迭代所有子元素以及子元素的所有属性? 的相关文章

随机推荐

  • 为什么反汇编后的数据会变成指令?

    我需要一些帮助来理解此时此刻发生的事情 这段代码 发生 jmp Begin 我只知道 com 文件可以是 64kb 因此您希望将所有内容放在一个段中 如果你想放置变量 你需要jmp 但是当我搜索它时 很多指南只是在评论中说 jmp Begi
  • 在 PHP 中检测移动设备的最简单方法

    判断用户是否使用移动设备使用 PHP 浏览我的网站的最简单方法是什么 我遇到过很多可以使用的类 但我希望有一个简单的 if 条件 我有办法做到这一点吗 这是一个来源 检测移动浏览器 下载 PHP 脚本 Code
  • Fortran 中是否有用于将数组初始化为零的内在函数?

    在 Fortran 中是否有办法将数组 向量 矩阵 甚至标量 设置为零 2003 2008 似乎将 Fortran 提升到了一个非常现代的水平 我想知道它们是否包含了一种简单的方法来将数组值设置为零 而无需执行以下操作 do i 1 X d
  • 显然你可以修改 const 值而无需 UB。或者你可以吗?

    开始编辑 用户 user17732522指出调用UB的缺陷来自事实pop back 使根据使用的参考资料无效vector库文档 当发生这种情况时 不需要 constexpr 求值来检测它 因为它不是 C 核心的一部分 然而 user1773
  • Android 的“onActivityResult”机制不起作用

    我在一个简单的应用程序中遇到了一个大而令人沮丧的问题 我有两个活动 A 和 B 活动 A 通过单击按钮打开活动 B 活动 B 有两个 结束 如果用户单击 B Back 如果刚刚完成 并返回到 A 如果用户单击 B OK 按钮 则活动 B 完
  • 为什么 Python 字符串是不可变的?使用它们的最佳实践

    让Python字符串不可变的设计原因是什么 它如何让编程变得更容易 我习惯了可变字符串 比如 C 中的字符串 如果没有可变字符串 我该如何编程呢 有没有最佳实践 当您收到字符串时 您将确保它保持不变 假设您要构造一个Foo如下带有字符串参数
  • 在 Silverlight 中将 XML 动态绑定到 DataGrid

    我一直在尝试在 Silverlight 特别是 Silverlight 4 但 SL3 中的任何解决方案也可以 中将 XML 通过 XElement 动态绑定到 DataGrid 但一直无法做到这一点 我希望动态地执行此操作 即 没有严格的
  • RewriteRule 无法编译正则表达式

    我以前的服务器工作正常 今天我更换了新服务器 并且 RewriteRule 无法在我的 htaccess 上编译正则表达式 如何修复这条线 RewriteRule category 0 9 category php pid 1 catnam
  • 你可以将 UITabBarController 推入 UINavigationController 中吗

    是否无法将 UITabBarController 推入 UINavigationController 中 我在旧版本的 iOS 中读过 但现在情况仍然如此吗 简而言之 是的 你可以 但仅仅因为你可以 并不意味着你应该这样做 这UITabBa
  • Django 中的导航

    我刚刚在 django 中完成了我的第一个小 web 应用程序 我喜欢它 我即将开始将旧的 PHP 生产站点转换为 django 作为其模板的一部分 有一个导航栏 在 PHP 中 我在模板代码中根据当前 URL 检查每个导航选项的 URL
  • 按时间或运行总和进行缓冲以进行反应式扩展

    我对反应式扩展相当陌生 想要根据时间缓冲流 或者根据不超过阈值的运行总和 每个项目的大小由 lambda 指定 以先发生者为准 就像现有的Buffer按计数或时间 目前我已经编写了自己的实现Buffer方法按预期工作 使用ISchedule
  • 使用 .htaccess 附加参数

    我正在努力处理 htaccess 重写命令 我拥有的是 RewriteCond HTTP HOST www mywebsite co uk RewriteCond REQUEST URI subfolder RewriteRule subf
  • D3.js:根据值更改条的颜色[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我一直在尝试 d3 js 条形图 我想根据 y 轴的值更改颜色 如何实现这一点 我尝试添加线性渐变 但后来我失去了对它的控制 我正在编写的代码基于此 http bost ocks
  • 切片和数组有什么区别?

    为什么两者都是 u8 and u8 3 在这个例子中好吗 fn main let x u8 1u8 2 3 println x let y u8 3 1u8 2 3 println y 事实是 T n 可以强迫 T 这是让他们可以忍受的方面
  • 无法使用 PHP 执行多个 MariaDB 查询

    我在 MariaDB 中执行 SQL 查询时遇到了一个小问题 所有 PHP 变量都不为空 我想同时执行两个查询 在 MySQL 中它可以工作 但在 MariaDB 服务器中我不能 因为我收到错误 我有一个查询 UPDATE users SE
  • 如何使用vb.net表单删除MS Access数据库的记录以及如何使用vb.net表单进入受密码保护的数据库

    我是 vb net 的新手 而且还是一名学生 我创建了一个表单来在 vb net 中输入学生注册详细信息 以满足教育需求 我使用 MS Access 2010 创建了一个数据库并将其链接到我的 vb 表单 它工作正常 我可以通过 vb ne
  • C# 有 Handles 关键字吗?

    Protected Sub Menu1 MenuItemClick ByVal sender As Object ByVal e As System Web UI WebControls MenuEventArgs Handles Menu
  • 累积和的条件计数数据框 - 循环列

    我试图根据每个值的符号在数据帧内重置来计算累积和 这个想法是对每一列分别进行相同的练习 例如 假设我有以下数据框 df pd DataFrame A 1 1 1 1 1 1 1 1 1 1 1 1 B 1 1 1 1 1 1 1 1 1 1
  • Flutter(Dart):渲染引起的异常/RenderFlex溢出

    我遇到 Flutter Dart RenderFlex 像素溢出问题 渲染库的一个例外 如何管理或应用滚动功能到我的应用程序页面视图 并避免 Flutter 的渲染异常 并显示以下消息 RenderFlex 底部溢出了 28 个像素 如果您
  • 如何编写单个 LINQ to XML 查询来迭代所有子元素以及子元素的所有属性?

    我正在开发 asp net 移动应用程序 我使用 XML 作为数据库 我正在 net 中使用 LINQ to XML 查询 XML 以访问所需的元素和属性 我的 XML 文件中有以下部分