`

Linq to XML事件

阅读更多

在对XML树进行修改的时候,LINQ to XML事件会提供通知,LINQ to XML提供了2个事件来响应XML树的修改:Changing和Changed.当修改XML树时这2个时间会相继被触发.从运行结果我们可以看出,更新动作实际上是一个删除操作加上一个添加完成的:


using System;
using System.Xml.Linq;
using System.Linq;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
XElement xel
= new XElement(new XElement("Root",
new XElement("Person",
new XElement("Name", "Huang Cong"),
new XElement("Sex",""),
new XElement("Age",12)))
);

xel.Changing
+= new EventHandler<XObjectChangeEventArgs>(xel_Changing);
xel.Changed
+= new EventHandler<XObjectChangeEventArgs>(xel_Changed);

//修改Person元素的Age元素值
xel.Element("Person").SetElementValue("Age", 22);
}

static void xel_Changed(object sender, XObjectChangeEventArgs e)
{
Console.WriteLine(
"触发Changed事件:");
Console.WriteLine(
"ChangedValue:{0} \tObjectChange:{1}", ((XNode)sender).ToString(), e.ObjectChange);
Console.WriteLine(
"------------------------------------");
}

static void xel_Changing(object sender, XObjectChangeEventArgs e)
{
Console.WriteLine(
"触发Changing事件:");
Console.WriteLine(
"ChangingValue:{0} \tObjectChange:{1}", ((XNode)sender).ToString(), e.ObjectChange);
Console.WriteLine(
"------------------------------------");
}
}
}

警告:不允许在被触发事件的执行过程中修改XML树,特别不要在事件中修改触发事件发生的节点,因为这会导致不可预测的结果.不过可以在事件中修改另外一个XML树.

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics