XObjectChange 枚举
定义
public enum class XObjectChange
public enum XObjectChange
type XObjectChange =
Public Enum XObjectChange
- 继承
字段
| Add | 0 | XObject 已经或将要添加到 XContainer。An XObject has been or will be added to an XContainer. |
| Name | 2 | |
| Remove | 1 | XObject 已经或将要从 XContainer 中移除。An XObject has been or will be removed from an XContainer. |
| Value | 3 | XObject 的值已经或将要更改。The value of an XObject has been or will be changed. 此外,在序列化空元素过程中进行的更改(从空标记更改为开始/结束标记对,反之亦然)会引发此事件。In addition, a change in the serialization of an empty element (either from an empty tag to start/end tag pair or vice versa) raises this event. |
示例
下面的示例通过将元素添加到树中来引发事件。The following example raises an event by adding an element to the tree.
XElement root = new XElement("Root", "content");
root.Changing += (sender, e) =>
{
Console.WriteLine("Changing event raised");
Console.WriteLine(" Sender: " + sender.GetType());
Console.WriteLine(" Changing: " + e.ObjectChange);
};
root.Changed += (sender, e) =>
{
Console.WriteLine("Changed event raised");
Console.WriteLine(" Sender: " + sender.GetType());
Console.WriteLine(" Changed: " + e.ObjectChange);
};
root.Add(new XElement("Child", "child content"));
该示例产生下面的输出:This example produces the following output:
Changing event raised
Sender: System.Xml.Linq.XElement
Changing: Add
Changed event raised
Sender: System.Xml.Linq.XElement
Changed: Add
下面的示例通过从树中移除元素来引发事件。The following example raises an event by removing an element from the tree.
XElement root = new XElement("Root",
new XElement("Child", "content")
);
root.Changing += (sender, e) =>
{
Console.WriteLine("Changing event raised");
Console.WriteLine(" Sender: " + sender.GetType());
Console.WriteLine(" Changing: " + e.ObjectChange);
};
root.Changed += (sender, e) =>
{
Console.WriteLine("Changed event raised");
Console.WriteLine(" Sender: " + sender.GetType());
Console.WriteLine(" Changed: " + e.ObjectChange);
};
root.Element("Child").Remove();
该示例产生下面的输出:This example produces the following output:
Changing event raised
Sender: System.Xml.Linq.XElement
Changing: Remove
Changed event raised
Sender: System.Xml.Linq.XElement
Changed: Remove
下面的示例通过更改元素的名称来引发事件。The following example raises an event by changing the name of an element.
XElement root = new XElement("Root", "content");
root.Changing += (sender, e) =>
{
Console.WriteLine("Changing event raised");
Console.WriteLine(" Sender: " + sender.GetType());
Console.WriteLine(" Changing: " + e.ObjectChange);
};
root.Changed += (sender, e) =>
{
Console.WriteLine("Changed event raised");
Console.WriteLine(" Sender: " + sender.GetType());
Console.WriteLine(" Changed: " + e.ObjectChange);
};
root.Name = "NewName";
该示例产生下面的输出:This example produces the following output:
Changing event raised
Sender: System.Xml.Linq.XElement
Changing: Name
Changed event raised
Sender: System.Xml.Linq.XElement
Changed: Name
下面的示例通过设置属性的值来引发事件。The following example raises an event by setting the value of an attribute.
XElement root = new XElement("Root",
new XAttribute("Att", "att value")
);
root.Changing += (sender, e) =>
{
Console.WriteLine("Changing event raised");
Console.WriteLine(" Sender: " + sender.GetType());
Console.WriteLine(" Changing: " + e.ObjectChange);
};
root.Changed += (sender, e) =>
{
Console.WriteLine("Changed event raised");
Console.WriteLine(" Sender: " + sender.GetType());
Console.WriteLine(" Changed: " + e.ObjectChange);
};
root.FirstAttribute.Value = "new contents";
该示例产生下面的输出:This example produces the following output:
Changing event raised
Sender: System.Xml.Linq.XAttribute
Changing: Value
Changed event raised
Sender: System.Xml.Linq.XAttribute
Changed: Value
注解
这 enum 将指定为引发事件时的事件类型 XObject 。This enum specifies the event type when an event is raised for an XObject.
所有修改 XML 树的操作都将细分为一系列的基元。All operations that modify the XML tree break down to a series of primitives. 有四种类型的基元。There are four types of primitives. 其中两个基元 (添加和删除) 对集合执行操作。Two of the primitives (Add and Remove) act on collections. 其中两个 () 对实例执行的名称和值。Two of them (Name and Value) act on instances. 对于每个基元,都有相应的事件。There is a corresponding event for each of these primitives.
在其中一个事件中修改 XML 树时,应小心,因为这样做可能会导致意外的结果。You should be careful when modifying an XML tree within one of these events, because doing this might lead to unexpected results. 例如,如果您收到一个 Changing 事件,并且在处理该事件时,您从树中删除该节点,则可能不会收到该 Changed 事件。For example, if you receive a Changing event, and while the event is being processed you remove the node from the tree, you might not receive the Changed event. 当处理某个事件时,可以修改一个 XML 树,而不是包含正在接收事件的节点的 XML 树;如果修改不影响引发事件的特定节点,则修改同一个树是有效的。When an event is being processed, it is valid to modify an XML tree other than the one that contains the node that is receiving the event; it is even valid to modify the same tree provided the modifications do not affect the specific nodes on which the event was raised. 但是,如果您修改包含接收事件的节点的树区域,则您收到的事件和对树的影响将不确定。However, if you modify the area of the tree that contains the node receiving the event, the events that you receive and the impact to the tree are undefined.