2016-11-26 4 views
1

XMLファイルの節約データに問題があります。選択したノードの値を変更する必要がありますが、そのたびに最初のノードの値が変更されます。どんなアドバイスですか?あなたのXPathは常にツリーから最初の項目を選択しているXMLファイルの間違った節約C#

<?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

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ファイルです。

正しいノードを選択する必要があります。したがって、text()を使用してノードの値に条件を作成し、親に移動してCaloriesを選択します。

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

をXMLへ:A' 'のオブジェクト – Quicki

+0

@Quicki多分値のインスタンスに設定されていないオブジェクト参照は、その値外時々ありますXMLで?あなたのコード内のそれらのケースのチェックをする必要があります –

+0

正しいことを確認しました – Quicki

1

使用LNQ私はとNullReferenceExceptionアボエラーを取得

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

私は持っていますが、 – Quicki

関連する問題