You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#查找含特定子元素的元素时仅返回首个匹配组的问题

问题分析与解决方案

嘿,我一眼就揪出你代码里的问题啦!

问题根源

你在where子句里用了el.Element("ip"),这个方法的作用是只获取当前<group>节点下的第一个<ip>子元素。所以哪怕某个<group>里后面的<ip>值和文本框输入匹配,这个条件也会直接忽略它——就像你看到的,只有第一个<group>(name="a")的第一个<ip>是10.3.4,能匹配上;第二个<group>(name="b")的第一个<ip>是10.2.1,和输入值不匹配,所以被过滤掉了,哪怕它里面确实有10.3.4这个IP。

修复后的代码

你需要检查当前<group>下的所有<ip>元素,只要其中有一个和输入值匹配,就选中这个<group>。可以用Elements("ip")获取所有IP子元素,再配合Any()方法实现这个逻辑:

XElement root = XElement.Load("c:\\etc");
IEnumerable<XElement> tests = from el in root.Elements("group")
                              // 检查当前group下是否有任意一个ip元素的值等于输入文本
                              where el.Elements("ip").Any(ip => (string)ip == textBox1.Text)
                              select el;
foreach (XElement el in tests)
    Console.WriteLine((string)el.Attribute("name"));

验证效果

当你在文本框输入10.3.4时,这段代码会同时输出a和b,因为两个<group>里都包含这个IP;输入10.55.55时,只会输出b,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Leo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:49:02