[英]Edit xml file using xmldocument, search by attribute
我想寫一個小程序。 使用此程序,我想通過搜索特定的屬性名稱來編輯xml文件。 該屬性名稱在我的xml文件中多次出現,只是數量有所變化。 我知道我可以通過使用linq或xmldocument來做到這一點,有很多解決方案。 我寫的代碼對我來說似乎是正確的,我不明白這里有什么問題。 有人可以看一下我的代碼嗎? 我會很感激您的幫助。
我要編輯的只是平衡感。 不多。 真的就是如此。
我的xml文件:
<?xml version=“1.0” encoding=“utf-8”?>
<Data>
<Place>
<Date Month="February">
<Counter>2</Counter>
<Player>1</Player>
<Player>2</Player>
<Game Name="Football">
<IdNumber>1</IdNumber>
<salutation>Mr</salutation>
<prename>Prename1</prename>
<surname>Surname1</surname>
<maximumbalance>100</maximumbalance>
<balance>100</balance>
</Game>
<Game Name="Tennis">
<IdNumber>2</IdNumber>
<salutation>Mr</salutation>
<prename>Prename2</prename>
<surname>Surname2</surname>
<maximumbalance>100</maximumbalance>
<balance>100</balance>
</Game>
</Date>
</Place>
</Data>
我的解決方案在這里:
private void edit_Click(object sender, RoutedEventArgs e)
{
XmlDocument xdoc = new XmlDocument();
xdoc.Load(Path);
XmlNode node = xdoc["Data"]["Place"]["Date"]["Game"]
int countvalues = 100;
for (int i = 0; i < countvalues; i++)
foreach (XmlNode childNode in node.ChildNodes)
{
if (childNode.Attributes["Name"].InnerText.Equals("Tennis"))
{
childNode["balance"].InnerText = xBal.Text;
}
}
xdoc.Save(Path);
}
我的xml文件中還有很多條目(Tennis1,Tennis2等),這現在不是問題,
該行:childNode.Attributes [“ Name”]。InnerText.Equals(“ Tennis”))為null,不知道為什么
...我正在使用Visual Studio 2015和WPF
問候馬丁
您的代碼與Xml文檔的結構不完全匹配。 您忽略了Player元素。 嘗試XmlNode node = xdoc [“ Data”] [“ Place”] [“ Date”] [“ Player”] [“ Game”]
請嘗試使用此示例。 我認為它將正常運行。
string xBal = "200";
string path = "D:\\xml.xml";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(path);
XmlNodeList NodeList = xmlDoc.GetElementsByTagName("Game");
foreach (XmlNode item in NodeList)
{
if (item.Attributes[0].InnerText.Equals("Tennis"))
{
XmlNode balance = item.SelectSingleNode("balance");
balance.InnerText = xBal;
}
}
xmlDoc.Save(path);
這應該為您工作。 您的主節點已經包含Game元素-這就是為什么您將無法在ChildNode中找到它的原因。 我更正了您的主要路徑,不包括“游戲”節點。 現在,您可以在ChildNodes集合中找到它。 我為Node.Name和Attribute名稱添加了一些檢查,以確保它是Game節點。 它應該為您工作。
XmlNode node = xdoc["Data"]["Place"]["Date"];
int countvalues = 100;
for (int i = 0; i < countvalues; i++)
{
foreach (XmlNode childNode in node.ChildNodes)
{
if (childNode.Name == "Game" && childNode.Attributes["Name"].InnerText.Equals("Tennis"))
{
childNode["balance"].InnerText = xBal.Text;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.