【发布时间】:2014-01-17 08:47:15
【问题描述】:
在我的应用程序中,如果用户在另一个文本框中输入数字(例如:用户在 textbox1 中输入数字“123”),我希望在文本框中显示 xml 节点的值。应用程序应检查 xml如果“123”存在,然后获取其他节点的值)。但是xml文件不是固定的。它由应用程序本身创建(用户在文本框中输入的内容)。
几个小时后我还是不明白。这听起来很简单(我相信对你们中的大多数人来说确实如此),但我是 C# 的大新手。所以我google了很多,最后找到了SelectSingleNode和SelectNodes。首先我尝试了这段代码:
private void txtKNrNew_Leave(object sender, EventArgs e)
{
XDocument xdoc = XDocument.Load(path + "\\save.xml");
int CustNos;
if (Int32.TryParse(txtKNrNew.Text, out CustNos))
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(path + "\\save.xml");
var xmlNodeExist = "Buchhaltung/Customers/CustNo";
var CustNoExist = xdoc.XPathSelectElements(xmlNodeExist).FirstOrDefault(x => (int)x == CustNos);
var SurnameNode = xmlDoc.SelectSingleNode("Buchhaltung/Customers/Surname");
var ForenameNode = xmlDoc.SelectSingleNode("Buchhaltung/Customers/Forename");
string surname = SurnameNode.InnerText;
string forename = ForenameNode.InnerText;
if (CustNoExist != null)
{
txtSurnameNew.Text = surname;
txtForenameNew.Text = forename;
}
}
}
这总是返回第一个 xml 节点的值(这里:“Stuff”和“Thing”。最后你可以看到 XML 文件)。所以我尝试使用SelectNodes:
private void txtKNrNew_Leave(object sender, EventArgs e)
{
XDocument xdoc = XDocument.Load(path + "\\save.xml");
int CustNos;
if (Int32.TryParse(txtKNrNew.Text, out CustNos))
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(path + "\\save.xml");
var xmlNodeExist = "Buchhaltung/Customers/CustNo";
var CustNoExist = xdoc.XPathSelectElements(xmlNodeExist).FirstOrDefault(x => (int)x == CustNos);
var SurnameNode = xmlDoc.SelectNodes("Buchhaltung/Customers/Surname");
var ForenameNode = xmlDoc.SelectNodes("Buchhaltung/Customers/Forename");
string surname = SurnameNode[0].InnerText;
string forename = ForenameNode[0].InnerText;
if (CustNoExist != null)
{
txtSurnameNew.Text = surname;
txtForenameNew.Text = forename;
}
}
}
这返回给我的结果与另一个相同。我知道因为我使用[0]。所以[]中的数字不应该是固定的。但是有没有办法解决这个问题?哪种方式更好?如何正确获取我想要的值?
有人可以帮我或给我一个提示吗?
谢谢, 泰勒
PS:在这里你可以看到我生成的 XML 文件:
<Buchhaltung>
<Customers>
<CustNo>123</CustNo>
<Surname>Stuff</Surname>
<Forename>Thing</Forename>
<Addr>Addr</Addr>
<Zip>Zip</Zip>
<Place>Place</Place>
<Phone>Phone</Phone>
<Mail>Mail</Mail>
</Customers>
<Customers>
<CustNo>137</CustNo>
<Surname>Other</Surname>
<Forename>Name</Forename>
<Addr>Address</Addr>
<Zip>12345</Zip>
<Place>New York</Place>
<Phone>1234567890</Phone>
<Mail>mail@example.com</Mail>
</Customers>
</Buchhaltung>
【问题讨论】: