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

C# WinForm如何检测XML文件中aircraft_name是否重复?

C# WinForm 检测XML中aircraft_name唯一性问题

我正在开发一个C# WinForm程序,需要向第三方XML文件添加aircraft_info节点,要求aircraft_name必须唯一。计划获取用户输入名称后检测是否存在,若存在则提示更换,但尝试三种方法均失败,希望实现首次检测到重复时返回bool值的方案。

尝试过的代码:

方法一(XDocument 错误用法):

XDocument doc = XDocument.Load("compliance_data.xml");
XElement root = new XElement("aircraft_info");

var matches = root
.Descendants("aircraft_info")
.Where(ft => ((string)ft.Element("aircraft_name")) == "Default");

问题:错误地新建空aircraft_info节点查找后代,而非从加载的XML文档中查询。

方法二(XDocument 未判断存在性):

XDocument doc = XDocument.Load("compliance_data.xml");

var matches = doc
.Descendants("aircraft_info")
.Where(ft => ((string)ft.Element("aircraft_name")) == "Default");

问题:仅获取匹配集合,未判断是否存在,也未返回bool值。

方法三(XmlDocument XPath 语法问题):

XmlDocument doc = new XmlDocument();
doc.Load(@"compliance_data.xml");

foreach (XmlNode node in doc.SelectNodes("//aircraft_info[aircraft_name == \"Default\"]/aircraft_name"))
{
    MsgBox.Show(node.InnerText, "abc", MessageBoxButtons.OK, MessageBoxIcon.None); //自定义消息框
}

问题:XPath字符串比较语法错误,且未直接返回bool值,而是遍历所有匹配项。


正确实现方案:

方案1:使用LINQ to XML(XDocument)

利用Any()方法,找到第一个匹配项立即返回true,满足"首次检测到重复就返回"的需求:

public bool IsAircraftNameExists(string inputName)
{
    XDocument doc = XDocument.Load("compliance_data.xml");
    return doc.Descendants("aircraft_info")
              .Any(ft => (string)ft.Element("aircraft_name") == inputName);
}

调用示例:

string userInput = "用户输入的名称";
if (IsAircraftNameExists(userInput))
{
    MsgBox.Show("该飞机名称已存在,请更换", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else
{
    // 执行添加aircraft_info节点的逻辑
}

方案2:使用XmlDocument

修正XPath语法,用SelectSingleNode直接判断是否存在匹配项:

public bool IsAircraftNameExists(string inputName)
{
    XmlDocument doc = new XmlDocument();
    doc.Load(@"compliance_data.xml");
    // 用单引号包裹字符串避免转义问题,若输入含单引号需替换为''
    string xpath = $"//aircraft_info[aircraft_name='{inputName.Replace("'", "''")}']";
    return doc.SelectSingleNode(xpath) != null;
}

调用示例同上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 14:21:25