2016-11-26 45 views
1

我在XML文件中存儲數據時遇到問題。我需要更改所選節點的值,但每次都會更改第一個節點的值。任何建議?XML文件錯誤節省C#

Values v = new Values(); 
a = v.ValueNameFromList; 
System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument(); 
    xmlDoc.Load(path1); 
    foreach (Test element in dpc.estList) 
    { 
      if (element.name == a) 
      { 
       xmlDoc.SelectSingleNode("Collection/Elements/Element/Calories").InnerText = GetPoints.countPoints.ToString(); 
       xmlDoc.Save(path1); 
      } 
     } 

這是XML文件:

<?xml version="1.0" encoding="utf-8"?> 
<Collection> 
    <Elements> 
    <Element> 
     <name>Cooking</name> 
     <Calories>100</Calories> 
    </Element> 
    <Element> 
     <name>Dancing</name> 
     <Calories>0</Calories> 
    </Element> 
    <Element> 
     <name>Walking</name> 
     <Calories>0</Calories> 
    </Element> 
    </Elements> 
</Collection> 

回答

3

你的XPath總是選擇從樹中的第一項。

您需要選擇正確的節點。因此,使用text()來創建節點值的條件,然後導航到父級並選擇Calories消退。

"Collection/Elements/Element/name[text()="+a+"]/../Calories" 
+0

我得到阿布的NullReferenceException錯誤:對象引用不設置到對象的實例 – Quicki

+0

@Quicki說不定了''的價值有時是值外在XML?你需要檢查你的代碼中的這些情況 –

+0

這是正確的我檢查了 – Quicki

1

使用LNQ到XML

XDocument doc = XDocument.Load(path); 

foreach (Test element in dpc.estList) 
{ 
    if (element.name == a) 
    { 
     var selected = 
      doc.Root 
       .Descendants("Element") 
       .FirstOrDefault(element => element.Element("name").Value.Equals(a)); 

     selected.Element("Calories").Value = GetPoints.countPoints.ToString(); 
     doc.Save(path); 
    } 
} 
+0

我有一個錯誤類型'System.Xml.XmlDocument'不包含'Root'的定義,沒有擴展方法'Root'可以找到System.Xml.XmlDocument'(你是否缺少使用指令或程序集引用?)' – Quicki

+0

我正在使用'XDocument',你需要添加引用到'System.Xml.Linq' – Fabio

+0

我有,它仍然沒有' t work – Quicki