posts - 112, comments - 215, trackbacks - 0, articles - 34
  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

.NET XMLNode操作实例

Posted on 2007-11-29 15:56 济公 阅读(3313) 评论(0)  编辑 收藏 引用 所属分类: XML

  //在当前节点的所有字节点的末尾添加一个新的字节点
  //XmlDocument Doc,节点所在的XML文档
  //XmlNode Current,待插入子节点的当前节点
  //string ElemName,新增节点的名称
  //string ElemText,新增节点的属性值
  //返回值:添加的新节点
  public XmlNode AppendNewNode(XmlDocument Doc,XmlNode Current,string ElemName,string ElemText)
  {
   //创建一个新节点
   XmlElement elem=Doc.CreateElement(ElemName);
   elem.InnerText=ElemText;
   //将该节点添加到当前节点的字节点末尾
   return Current.AppendChild(elem);
  }

  //在当前节点的所有字节点的开始添加一个新的字节点
  //如上面的函数说明
  public XmlNode PrependNewNode(XmlDocument Doc,XmlNode Current,string ElemName,string ElemText)
  {
   //创建一个新节点
   XmlElement elem=Doc.CreateElement(ElemName);
   elem.InnerText=ElemText;
   //将该节点添加到当前节点的字节点末尾
   return Current.PrependChild(elem);
  }

  //在当前节点添加一个新的属性值
  //string Xmlns,给定的前缀最近的XMLNS声明
  public void AddAttr(XmlDocument Doc,XmlNode Current,string Xmlns,string attrName,string attrVal)
  {
   string ns=Current.GetNamespaceOfPrefix(Xmlns);
   XmlNode attr=Doc.CreateNode(XmlNodeType.Attribute,attrName,ns);
   attr.Value=attrVal;
   Current.Attributes.SetNamedItem(attr);
  }

  //输出指定节点的所有信息(包括子节点)
  public void OutputXMLNode(XmlNode Current)
  {
   Console.WriteLine("\n\n 输出节点所有信息.......");
   IEnumerator ienum=Current.GetEnumerator();
   XmlNode Author;
   while(ienum.MoveNext())
   {
    Author=(XmlNode)ienum.Current;
    Console.WriteLine(Author.OuterXml);
    Console.WriteLine();
   }
  }

XmlDocument doc=new XmlDocument();
   doc.LoadXml("<作者 xmlns:auth='QIANG' auth:性别='男'>"+
    "<电话>13507175464</电话>"+
    "</作者>");
   Console.WriteLine("初始的XML文档.....");
   doc.Save(Console.Out);

   XmlNode root=doc.FirstChild;
   Class1 XmlTest=new Class1();

   XmlTest.AppendNewNode(doc,root,"姓名","张三");
   XmlNode book=XmlTest.AppendNewNode(doc,root,"书籍","");

   XmlTest.AppendNewNode(doc,book,"出版日期","2001-1-1");
   XmlTest.PrependNewNode(doc,book,"名称","生活空间");

   Console.WriteLine("\n\n 增加节点后的XML文档.........");
   doc.Save(Console.Out);

   XmlElement elem=doc.CreateElement("电子邮件");
   elem.InnerText="zhao@163.com";
   root.InsertAfter(elem,root.FirstChild);

   Console.WriteLine("\n\n 使用InsertAfter增加节点后的XML文档.......");
   doc.Save(Console.Out);

   XmlNode clone=root.Clone();

   Console.WriteLine("\n\n 含字节点的克隆节点内容.......");
   Console.WriteLine(clone.OuterXml);

   XmlNode shallow=root.CloneNode(false);
   Console.WriteLine("\n\n 不含字节点克隆节点内容.......");
   Console.WriteLine(shallow.OuterXml );

   XmlTest.OutputXMLNode(root);

   XmlTest.AddAttr(doc,root,"auth","年龄","27");
   Console.WriteLine("\n\n 添加新属性年龄后的XML文档.......");
   doc.Save(Console.Out);

   elem=doc.CreateElement("籍贯");
            elem.InnerText="广州";
   root.ReplaceChild(elem,root.FirstChild);
   Console.WriteLine("\n\n 使用籍贯节点替代电话节点后的XML文档.........");
   doc.Save(Console.Out);

   root.RemoveChild(root.FirstChild);
   Console.WriteLine("\n\n 删除指定节点籍贯后的XML文档.........");
   doc.Save(Console.Out);

   root.RemoveAll();
   Console.WriteLine("\n\n 删除所有属性和节点后的XML文档..........");
   doc.Save(Console.Out);

只有注册用户登录后才能发表评论。