请注意,我是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");
}我的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>但是消息框总是弹出。我做错了什么?
发布于 2014-01-15 21:05:49
这是因为您的XPath返回所有CustNo元素,而不管它的内容如何。
尝试以下几个方面:
var myNumber = 12;
var xmlNodeExist = String.Format("Buchhaltung/Customers/CustNo[. = {0}]", myNumber.ToString());或者使用First和LINQ:
var myNumber = 12;
var xmlNodeExist = "Buchhaltung/Customers/CustNo";
var CustNoExist = xdoc.XPathSelectElements(xmlNodeExist).FirstOrDefault(x => (int)x == myNumber);发布于 2014-01-15 21:05:26
您目前正在测试是否存在任何“CustNo”元素。关于本参考语法,请参阅XPath。
您的XPath应该这样说:
Buchhaltung//Customers[CustNo='12']
它表示“任何包含值=‘12’的'CustNo‘元素的customers元素
将其与当前代码相结合:
var custNoGivenByCustomer = "12";
var xmlNodeExistsXpath = String.Format("Buchhaltung//Customers[CustNo='{0}']", custNoGivenByCustomer );
var CustNoExist = xdoc.XPathSelectElement(xmlNodeExistsXpath);发布于 2014-01-15 21:06:08
可以使用
var number = textBox1.Text;
var CustNoExist = xdoc.Descendants("CustNo").Any(x => (string)x == number);
if(CustNoExist)
{
MessageBox.Show("asdf");
}https://stackoverflow.com/questions/21148091
复制相似问题