簡體   English   中英

使用xmldocument編輯xml文件,按屬性搜索

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM