使用 C# 检查 XML 节点值是否已存在于 xml 文件中

Tyl*_*ler 0 c# xml

请注意,我是 C# 新手,我现在正在学习它:) 我找不到与我的问题类似的东西,所以我来到这里。

我有一个添加客户的应用程序(处于最后阶段)。所有客户都存储在 XML 文件中。每个客户都会获得一个新的客户编号。在我的 xml 文件中,我得到了一个XmlNode名为CustNo. 现在,如果用户添加一个新客户并输入一个已经存在的号码,则应该弹出一个消息框,告知该号码已经存在。我得到了这个 C# 代码:

XDocument xdoc = XDocument.Load(path + "\\save.xml");
var xmlNodeExist = String.Format("Buchhaltung/Customers/CustNo");
var CustNoExist = xdoc.XPathSelectElement(xmlNodeExist);

if (CustNoExist != null)
{
   MessageBox.Show("asdf");
}
Run Code Online (Sandbox Code Playgroud)

我的 XML 文件如下所示:

<Buchhaltung>
    <Customers>
        <CustNo>12</CustNo>
        <Surname>Random</Surname>
        <Forename>Name</Forename>
        <Addr>Address</Addr>
        <Zip>12345</Zip>
        <Place>New York</Place>
        <Phone>1234567890</Phone>
        <Mail>example@test.com</Mail>
    </Customers>
    <Customers>
        <CustNo>13</CustNo>
        <Surname>Other</Surname>
        <Forename>Forename</Forename>
        <Addr>My Address</Addr>
        <Zip>67890</Zip>
        <Place>Manhattan</Place>
        <Phone>0987654321</Phone>
        <Mail>test@example.com</Mail>
    </Customers>
</Buchhaltung>
Run Code Online (Sandbox Code Playgroud)

但之后总是弹出消息框。我究竟做错了什么?

Mar*_*zek 5

这是因为您的 XPath 返回所有CustNo元素,无论其内容如何。

尝试以下操作:

var myNumber = 12;
var xmlNodeExist = String.Format("Buchhaltung/Customers/CustNo[. = {0}]", myNumber.ToString());
Run Code Online (Sandbox Code Playgroud)

或使用FirstLINQ to XML:

var myNumber = 12;
var xmlNodeExist = "Buchhaltung/Customers/CustNo";
var CustNoExist = xdoc.XPathSelectElements(xmlNodeExist).FirstOrDefault(x => (int)x == myNumber);
Run Code Online (Sandbox Code Playgroud)