在我的應用程序中,如果用戶輸入另一個文本框中的某個數字(例如:textbox1中的用戶類型),我想要在文本框中顯示xml節點的顯示值數字「123」。應用程序應該檢查xml是否存在「123」,然後獲取其他節點的值)。但是xml文件沒有修復。它由應用程序本身創建(用戶在文本框中鍵入的內容)。獲取xml節點值嘗試使用SelectSingleNode和SelectNodes使用c#
過了幾個小時我仍然沒有明白。這聽起來很簡單(我確信你的大部分都是這樣),但我是c#中的一個大新手。所以我搜索了很多,最後找到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節點的值(這裏:「東西」和「物」在最後,你可以看到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>[email protected]</Mail>
</Customers>
</Buchhaltung>
感謝您的答案。你能解釋我的第一行嗎?我不明白 – Tyler
這是XPaht表達式,它表示:查找包含具有==到CustNo變量值([CustNo/text()= 123])的子元素CustNo的任何Customers元素(// Customers)) 。然後我連接「姓氏」和「姓氏」以獲得找到的客戶元素的正確子元素。我原來的帖子出錯了,但我現在已經更正了。 –
你可以在這裏測試你的XPath表達式:http://www.xpathtester.com/test –