如何使用 LINQ C# 正确搜索 xml 文档

2023-11-26

我很难弄清楚如何正确搜索 xml 文档。我今天疯狂地阅读其他表格,但似乎无法理解。希望有人能给我一些更详细的信息,告诉我如何正确执行此操作以及为什么使用 LINQ。这是 XML 文件。

<?xml version="1.0" encoding="utf-8"?>
<body>
  <Customers>
    <Client>
      <Firstname Value="someguy" />
      <LastName Value="test" />
      <PhoneNumber Value="541555555" />
      <Address Value="55 nowhere" />
      <City Value="sometown" />
      <State Value="somestate" />
    </Client>
  </Customers>
</body>

我想要完成的是返回与客户名称匹配的每个元素的所有值。这是我的代码。

       IEnumerable<XElement> test = doc.Root.Descendants()
            .Where(nodeName => nodeName.Name == "Client"
            && nodeName.Descendants().Any(x => x.Name == "Firstname"
            && x.Value == "someguy"));

        foreach (XElement m in test)
        {
            MessageBox.Show(m.ToString());
        }

非常感谢您的帮助。如果可能的话,请解释一下使用 LINQ 的想法就像格式一样。不太确定如何解释我的要求,但在大多数情况下,只是更多地了解它的工作方式或格式等......

EDIT

我已经尝试了给出的解决方案,但似乎仍然没有任何效果。请告诉我我在这里做错了什么。

        private void button2_Click(object sender, EventArgs e)
    {
        string seach = txtSearch.Text;

        XDocument doc = XDocument.Load(@"C:\users\tim\desktop\test.xml");

        var result = doc.Elements("Customers")
            .Elements("Client")
            .Where(x => x.Elements("Firstname")
                         .Where(c => c.Attribute("Value").Value == "someguy")
                         .Any())
            .ToList();

        foreach (var m in result)
        {
            MessageBox.Show(m.ToString());
        }
    }

EDIT:

好的,我现在已经开始工作并输出我正在寻找的数据。有人可以告诉我是否有更有效的方法来完成我在此编辑下发布的内容。

        private void button2_Click(object sender, EventArgs e)
    {
        string seach = txtSearch.Text;

        XDocument doc = XDocument.Load(@"C:\users\tim\desktop\test.xml");

        var result = (from clientNode in doc.Root.Descendants("Client")
                      from name in clientNode.Descendants("Firstname")
                      where name.Attribute("Value").Value == "someguy"
                      select new
                      {
                          Fname = clientNode.Element("Firstname").Attribute("Value").Value,
                          Lname = clientNode.Element("LastName").Attribute("Value").Value,
                          Phone = clientNode.Element("PhoneNumber").Attribute("Value").Value,
                          Address = clientNode.Element("Address").Attribute("Value").Value,
                          City = clientNode.Element("City").Attribute("Value").Value,
                          State = clientNode.Element("State").Attribute("Value").Value
                      });

        foreach (var m in result)
        {
            MessageBox.Show(m.Fname + "\n" +
                            m.Lname + "\n" +
                            m.Phone + "\n" +
                            m.Address + "\n" +
                            m.City + "\n" +
                            m.State);
        }

您可以使用XElement并使用 LINQ 查询进行搜索,如下所示:

XElement doc = XElement.Parse(xml);
var result = doc.Elements("Customers")
                .Elements("Client")
                .Where(x => x.Elements("Firstname")
                             .Where(c => c.Attribute("Value").Value == "someguy")
                             .Any())
                .ToList();

因此,输入:

var xml =
@"<?xml version=""1.0"" encoding=""utf-8""?>
<body>
    <Customers>
    <Client>
        <Firstname Value=""someguy"" />
        <LastName Value=""some last name"" />
        <PhoneNumber Value=""123456"" />
        <Address Value=""some where"" />
        <City Value=""some town"" />
        <State Value=""some state"" />
    </Client>
    <Client>
        <Firstname Value=""someotherguy"" />
        <LastName Value=""some other last name"" />
        <PhoneNumber Value=""123456"" />
        <Address Value=""some other where"" />
        <City Value=""some other town"" />
        <State Value=""some other state"" />
    </Client>
    </Customers>
</body>";

XElement doc = XElement.Parse(xml);
var result = doc.Elements("Customers")
                .Elements("Client")
                .Where(x => x.Elements("Firstname")
                             .Where(c => c.Attribute("Value").Value == "someguy")
                             .Any())
                .ToList();

结果将是:

<Client>
    <Firstname Value=""someguy"" />
    <LastName Value=""some last name"" />
    <PhoneNumber Value=""123456"" />
    <Address Value=""some where"" />
    <City Value=""some town"" />
    <State Value=""some state"" />
</Client>

您可以显示值,例如:

MessageBox.Show(string.Format("Firstname: {0}\nLastName: {1}\nPhoneNumber: {2}\nAddress: {3}\nCity: {4}\nState: {5}",
                result[0].Element("Firstname").Attribute("Value").Value,
                result[0].Element("LastName").Attribute("Value").Value,
                result[0].Element("PhoneNumber").Attribute("Value").Value,
                result[0].Element("Address").Attribute("Value").Value,
                result[0].Element("City").Attribute("Value").Value,
                result[0].Element("State").Attribute("Value").Value));

Note:

  • 如果您知道结果应包含 0 或 1 个元素,则可以使用FirstOrDefault()代替ToList();
  • 元素名称区分大小写,因此请注意例如。
  • 您可以使用XElement.Load()例如从文件加载XElement doc = XElement.Load(@"d:\file.xml");
  • 如果您以这种方式选择元素,查询将具有更高的容错能力.Where(c => c.Name.ToString().ToLower() == "Customers".ToLower())
  • 如果您以这种方式选择属性,查询将更具容错性.Where(c => c.Attributes("Value").Where(a=>a.Value == "someguy").Any())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 LINQ C# 正确搜索 xml 文档 的相关文章

  • 使用 CMake 时如何导出 Emscripten 中的 C 函数

    In 本教程 https emscripten org docs porting connecting cpp and javascript Interacting with code html interacting with code
  • 转换 const void*

    我有一个函数返回一个const void 我想用它的信息作为char 我可以将它投射为 C 风格的罚款 char variable但是当我尝试使用reinterpret cast like reinterpret cast
  • 如何将 .txt 文件中的数据转换为 xml? C#

    我在一个文本文件中有数千行数据 我想通过将其转换为更容易搜索的内容来轻松搜索 我希望 XML 或其他类型的大型数据结构 尽管我不确定它是否是最好的对于我的想法 每行的数据如下所示 第 31 册 托马斯 乔治 32 34 154 每本书都不是
  • 语音识别编程问题入门

    所以 你们可能都看过 钢铁侠 其中托尼与一个名为贾维斯的人工智能系统进行交互 演示剪辑here http www youtube com watch v Go8zsh1Ev6Y 抱歉 这是广告 我非常熟悉 C C 和 Visual Basi
  • 在 C# 中,如何根据在 gridview 行中单击的按钮引用特定产品记录

    我有一个显示产品网格视图的页面 该表内有一列 其中有一个名为 详细信息 的超链接 我想这样做 以便如果用户单击该特定产品的详细信息单元格 将打开一个新页面 提供有关该产品的更多信息 我不确定如何确定哪个Product记录链接的详细信息以及我
  • 如何使用 Regex.Replace 从字符串中删除数字?

    我需要使用Regex Replace从字符串中删除所有数字和符号 输入示例 123 abcd33输出示例 abcd 请尝试以下操作 var output Regex Replace input d string Empty The d标识符
  • 不同 C++ 文件中的相同类名

    如果两个 C 文件具有相同名称的类的不同定义 那么当它们被编译和链接时 即使没有警告也会抛出一些东西 例如 a cc class Student public std string foo return A void foo a Stude
  • 什么是空终止字符串?

    它与什么不同标准 字符串 http www cplusplus com reference string string 字符串 实际上只是一个数组chars 空终止字符串是指其中包含空字符的字符串 0 标记字符串的结尾 不一定是数组的结尾
  • 获取没有显式特征的整数模板参数的有符号/无符号变体

    我希望定义一个模板类 其模板参数始终是整数类型 该类将包含两个成员 其中之一是类型T 另一个作为类型的无符号变体T 即如果T int then T Unsigned unsigned int 我的第一直觉是这样做 template
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • 已发布的 .Net Core 应用程序警告安装 .Net Core,但它已安装

    我制作了一个 WPF 和控制台应用程序 供某人在我无法访问的私人服务器上使用 我使用 Visual Studio 2019 的内置 发布向导 来创建依赖于框架的单文件应用程序 当该人打开 WPF 应用程序时 他们会看到标准警告 他们单击 是
  • 解析根元素内元素之间的 XML 文本

    我正在尝试用 Python 解析 XML 以下是 XML 结构的示例 a aaaa1 b bbbb b aaaa2 a
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • memcpy/memmove 到联合成员,这是否设置“活动”成员?

    重要说明 一些评论者似乎认为我是从工会抄袭的 仔细看memcpy 它从普通旧地址复制uint32 t 它不包含在联合中 另外 我正在复制 通过memcpy 到工会的特定成员 u a16 or u x in a union 不直接到整个联盟本
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • 模板类的模板构造函数的 C++ 显式模板特化

    我有一个像这样的课程 template
  • C++:为什么 numeric_limits 对它不知道的类型起作用?

    我创建了自己的类型 没有任何比较器 也没有专门化std numeric limits 尽管如此 由于某种原因 std numeric limits
  • 在 Win32 控制台应用程序中设置光标位置

    如何在 Win32 控制台应用程序中设置光标位置 最好 我想避免制作句柄并使用 Windows 控制台功能 我花了整个早上沿着那条黑暗的小巷跑 它产生的问题比它解决的问题还要多 我似乎记得当我在大学时使用 stdio 做这件事相对简单 但我
  • 没有“对 *this”功能的右值引用的解决方法

    我有一个围绕可移动对象的代理容器类 并希望代理能够隐式生成对底层对象的右值引用 但仅当代理本身被移动时 我相信我将能够按照提案 n2439 实施此行为 将移动语义扩展到 this http www open std org jtc1 sc2
  • 在 System.Type 上使用条件断点时出错

    这是函数 public void Init System Type Type this Type Type BuildFieldAttributes BuildDataColumns FieldAttributes 我在第一行设置了一个断点

随机推荐

  • 以最少的配置使用 Unity

    在工作中 我们经常使用Unity 它的工作非常出色 但是您使用它的次数越多 您的配置文件就会增长得越多 运行时问题也会增加得越多 并且您必须为每个测试项目重新创建统一配置的次数就越多 因此 我们最终得到了一个巨大的统一配置部分 必须在多个项
  • 在 Posix 中如何使用 dev_t 类型?

    我追求的是这种类型的含义以及什么接口可以使用它 Posix 规范中解释说dev t用于设备 ID 但是 对于路径所描述的任何对象 可以是文件 目录 fifo 或物理设备 来说 设备 id 意味着什么 例如 调用stat 应为您提供一个包含此
  • 将类添加到单击的元素

    我正在尝试向单击的元素添加一个类 有多个具有唯一 ID 的元素 因此我 不知道 元素的 ID 是什么 我可以使用以下代码的修改版本来实现此目的吗 Jquery document ready function this on click fu
  • 我如何在 iOS 5 中使用 CMDeviceMotion 获取设备的标题

    我正在使用陀螺仪开发 AR 应用程序 我使用了苹果代码示例公园 它使用旋转矩阵来计算坐标的位置 而且效果非常好 但现在我正在尝试实现一个 雷达 我需要根据设备航向来旋转它 我正在使用 CLLocationManager 标题 但它不正确 问
  • Angular ViewChildren 不会立即看到 ngFor 中的所有子级

    我有一个奇怪的行为 ViewChildren 对应于 ngFor 生成的子组件 ViewChildren 查询没有看到元素在数组中停留了很长时间 我所有的代码都在Plunker 打开控制台后查看 这是我的主要组成部分 Component s
  • XMLHttp请求超时

    如何为以下脚本添加超时 我希望它将文本显示为 时间到 var bustcachevar 1 bust potential caching of external pages after initial request 1 yes 0 no
  • Redis 获取大字符串很慢

    我是 Redis 的新手 所以如果这是一个愚蠢的问题 我深表歉意 我使用 Django 和 Redis 作为缓存 我正在腌制大约 200 个对象的集合并将其存储在 Redis 中 当我从 Redis 请求集合时 Django 调试工具栏通知
  • 带有固定包装器的引导网格 - 防止列堆叠

    正如标题所示 我正在尝试使用带有固定包装器的 Bootstrap 3 网格系统 但是 当我调整浏览器的大小时 即使包装器保持相同的大小 列也会堆积起来 顺便说一句 我正在使用版本 3 以便在移植网站后可以转向响应式布局 这是巨大的 而且我独
  • 使用 Snapshot 和 ParamMap 的 Angular Mock ActivatedRoute

    我正在使用这个 来自here constructor private heroService HeroService private activatedRoute ActivatedRoute ngOnInit const heroId t
  • 如何使用 JBoss 4.2.3 以编程方式找出我的 jboss 服务器正在侦听哪个端口?

    例如 如何确定我的简单 JBoss 4 2 3 服务器正在侦听端口 8080 这是我能达到的最接近的结果 但这不起作用 MBeanServerConnection server MBeanServerConnection new Initi
  • 量化约束与(封闭)类型族

    我正在尝试使用这篇博文的方法是在不悬而未决的情况下获取更高级的数据Identity简单情况的函子与量化约束推导一起 LANGUAGE TypeFamilies LANGUAGE QuantifiedConstraints Standalon
  • UITableView 在 iOS 7 中以偏移量开始

    我已将一个简单的 UITableView 拖到 iOS 7 中的 UIViewController 上 现在 在第一个单元格开始之前有一个垂直的空间偏移 我该如何摆脱它 我希望第一行更接近 UITableView 实际开始位置的上边缘 我没
  • 使用 .NET C# 连接到 Interbase 7.1 的最佳方法

    有人可以解释一下使用 NET C 连接到 Interbase 7 1 数据库的最佳方法吗 该应用程序将安装在许多最终用户计算机上 因此我必须与应用程序打包的 附加组件 越少越好 CodeGear 为 InterBase 的注册用户提供免费的
  • 如何更改熊猫箱线图中胡须的线条样式?

    有没有办法将 pandas 箱线图中胡须的线条样式更改为 默认值似乎是 我努力了 color dict boxes black whiskers black medians red caps black styles dict whiske
  • 如何在 C# 中跨本地网络进行 UDP 多播?

    我正在尝试在我的本地网络上进行一些简单的 UDP 通信 我想做的就是对网络上的所有机器进行多播 这是我的发送代码 public void SendMessage string message var data Encoding Defaul
  • c# - 如何将点移动给定距离 d (并获取新坐标)

    你好 我想知道是否有任何有效的方法来计算点的坐标 从原始位置移动了距离 d 假设我有一个点 P 0 3 0 5 我需要将该点随机方向移动距离 d 到目前为止 我通过随机选取新的 x 和 y 坐标来完成此操作 并且检查新旧点之间的距离是否等于
  • 经典 ASP - 捕获 500 错误

    我正在尝试诊断一个网站的问题 该网站似乎在代码中的某个地方抛出了错误 从错误日志来看 这似乎是由于 SQL 查询与错误代码的错误串联而导致的 SQL 语法错误 我的问题是 我无法重现该错误 但客户仍然收到该错误 这可能是由许多查询引起的 所
  • 在 R 中手动构建逻辑回归模型进行预测

    我正在尝试在数据集上测试逻辑回归模型 例如 3 个预测变量 X1 X2 X3 的 3 个系数 我知道如何在创建模型对象后测试模型 例如 mymodel lt glm Outcome X1 X2 X3 family binomial data
  • Axios 与promise.prototype.finally 不起作用

    不知道我错过了什么 按照此处的说明进行操作 https github com mzabriskie axios blob master COOKBOOK md 我已经安装了 axios 和 npmnpm install axios prom
  • 如何使用 LINQ C# 正确搜索 xml 文档

    我很难弄清楚如何正确搜索 xml 文档 我今天疯狂地阅读其他表格 但似乎无法理解 希望有人能给我一些更详细的信息 告诉我如何正确执行此操作以及为什么使用 LINQ 这是 XML 文件