首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用c#检查XML节点值是否已经存在于xml文件中

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

Stack Overflow用户
提问于 2014-01-15 21:01:05
回答 4查看 2.5K关注 0票数 0

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

我有一个应用程序,我在其中添加客户(它在最后阶段)。所有客户都存储在XML文件中。每个客户都有一个新的客户号码。在我的xml文件中,我得到了一个名为XmlNodeCustNo。现在,如果用户添加了一个新的客户并输入一个已经存在的数字,它应该弹出一个消息框来说明这个号码已经存在。我得到了这个c#代码:

代码语言:javascript
复制
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");
}

我的XML文件如下所示:

代码语言:javascript
复制
<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>

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-01-15 21:05:49

这是因为您的XPath返回所有CustNo元素,而不管它的内容如何。

尝试以下几个方面:

代码语言:javascript
复制
var myNumber = 12;
var xmlNodeExist = String.Format("Buchhaltung/Customers/CustNo[. = {0}]", myNumber.ToString());

或者使用First和LINQ:

代码语言:javascript
复制
var myNumber = 12;
var xmlNodeExist = "Buchhaltung/Customers/CustNo";
var CustNoExist = xdoc.XPathSelectElements(xmlNodeExist).FirstOrDefault(x => (int)x == myNumber);
票数 5
EN

Stack Overflow用户

发布于 2014-01-15 21:05:26

您目前正在测试是否存在任何“CustNo”元素。关于本参考语法,请参阅XPath。

您的XPath应该这样说:

Buchhaltung//Customers[CustNo='12']

它表示“任何包含值=‘12’的'CustNo‘元素的customers元素

将其与当前代码相结合:

代码语言:javascript
复制
var custNoGivenByCustomer = "12";
var xmlNodeExistsXpath = String.Format("Buchhaltung//Customers[CustNo='{0}']", custNoGivenByCustomer );
var CustNoExist = xdoc.XPathSelectElement(xmlNodeExistsXpath);
票数 1
EN

Stack Overflow用户

发布于 2014-01-15 21:06:08

可以使用

代码语言:javascript
复制
var number = textBox1.Text;
var CustNoExist = xdoc.Descendants("CustNo").Any(x => (string)x == number);
if(CustNoExist)
{
  MessageBox.Show("asdf");
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21148091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档