zoukankan      html  css  js  c++  java
  • XML 文档对象模型从XmlDocument 处理事件

    如何处理来自 XmlDocument 的事件

    此示例阐释当 XML 文档中的节点更改时,如何接收和处理事件。特别要说明的是,此示例说明了如何捕获以下段落中说明的 NodeChanged 和 NodeInserted 事件。

    修改 XmlDocument 可能会引起下面的一个或多个事件:

    • 当属于 XmlDocument 的任何节点被插入其他节点时,将发生 NodeInserted 事件。这包括由此文档创建的所有节点,不论它们是在文档树的内部还是外部,包括属性节点。
    • 当把属于此文档的任何节点从其父级移除时,将发生 NodeRemoved 事件。这包括由此文档创建的所有节点,不论它们是在文档树的内部还是外部,包括属性节点。
    • 当属于此文档的任何节点的 Value 属性被更改时,将发生 NodeChanged 事件。这仅应用于有 Value 属性的节点。
    • 当属于此文档的任何节点要被插入、移除或更改时,将发生 NodeInserting、NodeRemoving 或 NodeChanging 事件。

    这些事件使您可以在要停止操作时引发异常。XmlDocument 确保在引发异常后,文档将回到操作开始前的状态。

     
    VB XmlDocumentEvent.aspx

    [运行示例] | [查看源代码]

    在将 books.xml 文件加载到 XmlDocument 后,此示例应用程序修改文档中现有书籍的价格,并向文档中添加新书。这些更改将导致 NodeChanged 和 NodeInserted 事件。

    下列示例代码构造一个 XmlDocument 并加载 books.xml。

    XmlDocument myXmlDocument = new XmlDocument();
                myXmlDocument.Load (args);
                
    C# VB  

    该示例加载完 books.xml 以后,即将 NodeChanged 和 NodeInserted 事件处理程序添加到 XmlDocument。(这些处理程序的代码将出现在本主题的后面部分中。)

    myXmlDocument.NodeChanged += new XmlNodeChangedEventHandler(this.MyNodeChangedEvent);
                myXmlDocument.NodeInserted += new XmlNodeChangedEventHandler(this.MyNodeInsertedEvent);
                
    C# VB  

    该示例应用程序更改文档中的数据,将每本书的价格增加 2%。为此,该示例必须首先使用 XmlNode 类的 SelectNodes 方法选择要更改的数据。通过使用 SelectNodes 方法的 XML 路径语言 (Xpath) 表达式“descendant::book/price”,该示例选择所有书籍元素的价格子元素。然后,应用程序将这些选定的节点置于 XmlNodeList 中,在那里将对它们进行编辑,以反映 2% 的价格增长情况。价格增长操作包括以下步骤:获取价格元素的 InnerText 值,将该值增加 2%,然后将修改后的值插回到元素中。每当价格元素更改时,都有一个 NodeChanged 事件将新价格输出到屏幕上。(NodeChanged 事件的代码将出现在本主题的后面部分中。)

    // Increase all the book prices by 2%
                ...
                // Create a list of the  nodes and change their values
                XmlNodeList myXmlNodeList = myXmlDocument.SelectNodes("descendant::book/price");
                foreach (XmlNode myXmlNode in myXmlNodeList)
                {
                Console.WriteLine("<" + myXmlNode.Name + "> " + myXmlNode.InnerText);
                Double price = Double.Parse(myXmlNode.InnerText);
                myXmlNode.InnerText = (((Double)price * 1.02).ToString("#.00"));
                }
                
    C# VB  

    该示例应用程序还将一个节点插入 XmlDocument。一个插入新节点的简单方法是:创建一个 XmlDocumentFragment,确定要在文档中插入片段的位置,然后使用 XmlDocument 的 InsertBefore 或 InsertAfter 方法。如下列代码所示,该示例使用已准备好的 XML 的字符串创建 XmlDocumentFragment,然后将此片段插入 XmlDocument。插入新节点后,即发生 NodeInserted 事件,将新节点信息输出到屏幕上。(NodeInserted 事件的代码将出现在本主题的后面部分中。)

    // Create a new book
                XmlDocumentFragment myNewBook = myXmlDocument.CreateDocumentFragment();
                myNewBook.InnerXml = ("" +
                "" +
                "" +
                "Eric" +
                "Gamma" +
                "" +
                "
                49.95
                " +
                "");
                XmlElement rootXmlElement = myXmlDocument.DocumentElement;
                // Add the new book to the XmlDocument
                rootXmlElement.InsertBefore(myNewBook, rootXmlElement.FirstChild);
                ...
                // Clone the node and note that by cloning the node we
                // are inserting it again into the XmlDocument
                XmlNode myNewBook2 = myXmlDocument.DocumentElement.FirstChild.Clone();
                
    C# VB  

    下列代码说明处理 NodeChanged 和 NodeInserted 事件的函数。

    // Handle the Node Changed Event
                public void MyNodeChangedEvent(Object src, XmlNodeChangedEventArgs args)
                {
                Console.Write("Node Changed Event: <" + args.Node.Name + "> changed");
                if (args.Node.Value != null)
                {
                Console.WriteLine(" with value " + args.Node.Value);
                }
                else
                Console.WriteLine("");
                }
                // Handle the Node Inserted Event
                public void MyNodeInsertedEvent(Object src, XmlNodeChangedEventArgs args)
                {
                Console.Write("Node Inserted Event: <" + args.Node.Name + "> inserted");
                if (args.Node.Value != null)
                {
                Console.WriteLine(" with value " + args.Node.Value);
                }
                else
                Console.WriteLine("");
                }
                
    C# VB  

    摘要

    1. 要编辑节点值,首先使用 SelectNodes 选择节点,然后将选定的节点放到 XmlNodeList 中。
    2. 有六个可处理的节点事件:NodeInserted、NodeRemoved、NodeChanged、NodeInserting、NodeRemoving 或 NodeChanging。
    3. 要处理节点,可将节点处理程序添加到 XmlDocument 的实例中。
  • 相关阅读:
    LowercaseRoutesMVC ASP.NET MVC routes to lowercase URLs
    Asp.net MVC Combres的简单用法
    原码, 反码, 补码 详解
    四种数据存储结构---顺序存储 链接存储 索引存储 散列存储
    快速排序时间复杂度为O(n×log(n))的证明
    进程与线程及其区别
    linux c语言定时器
    平衡二叉查找树的一些知识总结
    C++编程练习(17)----“二叉树非递归遍历的实现“
    C++编程练习(16)----“排序算法 之 快速排序“
  • 原文地址:https://www.cnblogs.com/chorrysky/p/584486.html
Copyright © 2011-2022 走看看