2016-08-18 10 views
0

以下のコードを使用して、WPFアプリケーションにあるコンテキストメニューを右クリックして検証を追加するフォームを呼び出します。C#を使用してXML内にノードを追加する方法

public void AddValidation(object sender, RoutedEventArgs e) 
     { 
      ValidationForm obj = new ValidationForm(); 
      ProcessGrid.Content = obj.VForm; 
     } 

検証フォームが開きます。必要な詳細情報を入力した後、私は、フォーム内の特定の送信ボタンをクリックしたときに、それはこのようなXMLを作成します: -

<?xml version="1.0" encoding="utf-8"?> 
<Processes> 
    <Process Name="Process1" Namespace="" Methodname=""> 
    <Validations IsSelected="True" /> 
     <validation>xsdPath</validation> 
    <Validations> 
</Process> 
</Processes> 

私は再び新たな検証を追加する場合は、それが再び、この中にノードを追加します方法。

<?xml version="1.0" encoding="utf-8"?> 
<Processes> 
    <Process Name="Process1" Namespace="" Methodname=""> 
    <Validations IsSelected="True" /> 
     <validation>xsdPath</validation> 
     <validation>xsdPath1</validation> 
    <Validations> 
</Process> 
</Processes> 

次のコードを使用しています。 string MyValue;

MyValue = Pages.ProcessesLayoutList.MyValue; 
XDocument doc = XDocument.Load(@"C:\Users\562630\Desktop\New folder\ProcessComplete.xml"); 
var a = doc.Descendants("Process").Where(x => (string)x.Attribute("Name") == MyValue). 
Select(x => x.Element("Validations")).FirstOrDefault(); 
a.Add(new XElement("Validation", s)); 
doc.Save(@"C:\Users\562630\Desktop\New folder\ProcessComplete.xml"); 

しかし、私は当時とそうon.Soは、検証ノードにそれぞれ、すべての時間を追加した後、それが増分順に検証ノードを追加する必要がありますようにインクリメント名前のノードを追加します。これを行うには何らかの方法を提案してください。前もって感謝します。

答えて

1

新しく追加された要素の値シーケンスを維持するために、Count要素に依存することができます。この方法は、要素を同期して追加する場合にのみ機能します。

var count = 
     doc.Descendants("Validations") 
     .Elements() 
     .Count(); 

// Use count to maintain incremental value for your newly added elements. 
doc.Descendants("Validations") 
     .First() 
     .Add(new XElement("validation", string.Format("xsdPath{0}", count))); 

チェック示され、このDemo

+0

コード* *インクリメント名前で追加したノードを示すものではありません...ノード値ではないノード名は...答えや質問を更新することを検討してください。 –

+0

@AlexeiLevenkovは最初のステートメントで要素の数を計算しており、2番目のステートメントでは要素を追加する間にその数を使用しています。 –

+0

あなたのコードが追加するすべてのノードは、同じ名前*( "検証")を持ちますが、値は異なります。私はあなたがOPが使用しているのと同じ言葉を使って答えようとしていることを理解していますが、それはSOの答えにとって良いアプローチではないと思います。 –

関連する問題