2016-08-18 36 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> 

为了创建XML,我使用了下面的代码。 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,第一个声明我们正在计算元素数量,第二个声明中我们在添加元素的同时使用该数量。 –

+0

您的代码添加的所有节点都具有相同的*名称*(“验证”),但具有不同的值。我知道你正在尝试用OP所使用的相同词语来回答,但我认为这不是一个好的方法来回答问题。 –