• 怎样在C#里对xml文件进行修改,新增,删除,插入操作?


     怎样在C#里对xml文件进行修改,新增,删除,插入操作?

    已知有一个XML文件(bookstore.xml)如下:
    <?xml version="1.0" encoding="gb2312"?>
    <bookstore>
    <book genre="fantasy" ISBN="2-3631-4">
    <title>Oberon's Legacy</title>
    <author>Corets, Eva</author>
    <price>5.95</price>
    </book>
    </bookstore>

    1、往<bookstore>节点中插入一个<book>节点:

    XmlDocument xmlDoc=new XmlDocument();
    xmlDoc.Load("bookstore.xml");
    XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查找<bookstore>
    XmlElement xe1=xmlDoc.CreateElement("book");//创建一个<book>节点
    xe1.SetAttribute("genre","李赞红");//设置该节点genre属性
    xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性

    XmlElement xesub1=xmlDoc.CreateElement("title");
    xesub1.InnerText="CS从入门到精通";//设置文本节点
    xe1.AppendChild(xesub1);//添加到<book>节点中
    XmlElement xesub2=xmlDoc.CreateElement("author");
    xesub2.InnerText="候捷";
    xe1.AppendChild(xesub2);
    XmlElement xesub3=xmlDoc.CreateElement("price");
    xesub3.InnerText="58.3";
    xe1.AppendChild(xesub3);

    root.AppendChild(xe1);//添加到<bookstore>节点中
    xmlDoc.Save("bookstore.xml");

    //================
    结果为:

    <?xml version="1.0" encoding="gb2312"?>
    <bookstore>
    <book genre="fantasy" ISBN="2-3631-4">
    <title>Oberon's Legacy</title>
    <author>Corets, Eva</author>
    <price>5.95</price>
    </book>
    <book genre="李赞红" ISBN="2-3631-4">
    <title>CS从入门到精通</title>
    <author>候捷</author>
    <price>58.3</price>
    </book>
    </bookstore>

    2、修改节点:将genre属性值为“李赞红“的节点的genre值改为“update李赞红”,将该节点的子节点<author>的文本修改为“亚胜”。


    XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点
    foreach(XmlNode xn in nodeList)//遍历所有子节点
    {
    XmlElement xe=(XmlElement)xn;//将子节点类型转换为XmlElement类型
    if(xe.GetAttribute("genre")=="李赞红")//如果genre属性值为“李赞红”
    {
    xe.SetAttribute("genre","update李赞红");//则修改该属性为“update李赞红”

    XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点  
    foreach(XmlNode xn1 in nls)//遍历
    {
    XmlElement xe2=(XmlElement)xn1;//转换类型
    if(xe2.Name=="author")//如果找到
    {
    xe2.InnerText="亚胜";//则修改
    break;//找到退出来就可以了
    }
    }
    break;
    }
    }

    xmlDoc.Save("bookstore.xml");//保存。


    //=================

    最后结果为:


    <?xml version="1.0" encoding="gb2312"?>
    <bookstore>
    <book genre="fantasy" ISBN="2-3631-4">
    <title>Oberon's Legacy</title>
    <author>Corets, Eva</author>
    <price>5.95</price>
    </book>
    <book genre="update李赞红" ISBN="2-3631-4">
    <title>CS从入门到精通</title>
    <author>亚胜</author>
    <price>58.3</price>
    </book>
    </bookstore>


    3、删除 <book genre="fantasy" ISBN="2-3631-4">节点的genre属性,删除 <book genre="update李赞红" ISBN="2-3631-4">节点。


    XmlNodeList xnl=xmlDoc.SelectSingleNode("bookstore").ChildNodes;

    foreach(XmlNode xn in xnl)
    {
    XmlElement xe=(XmlElement)xn;

    if(xe.GetAttribute("genre")=="fantasy")
    {
    xe.RemoveAttribute("genre");//删除genre属性
    }
    else if(xe.GetAttribute("genre")=="update李赞红")
    {
    xe.RemoveAll();//删除该节点的全部内容
    }
    }
    xmlDoc.Save("bookstore.xml");

    //====================

    最后结果为:


    <?xml version="1.0" encoding="gb2312"?>
    <bookstore>
    <book ISBN="2-3631-4">
    <title>Oberon's Legacy</title>
    <author>Corets, Eva</author>
    <price>5.95</price>
    </book>
    <book>
    </book>
    </bookstore>


    4、显示所有数据。


    XmlNode xn=xmlDoc.SelectSingleNode("bookstore");

    XmlNodeList xnl=xn.ChildNodes;

    foreach(XmlNode xnf in xnl)
    {
    XmlElement xe=(XmlElement)xnf;
    Console.WriteLine(xe.GetAttribute("genre"));//显示属性值
    Console.WriteLine(xe.GetAttribute("ISBN"));

    XmlNodeList xnf1=xe.ChildNodes;
    foreach(XmlNode xn2 in xnf1)
    {
    Console.WriteLine(xn2.InnerText);//显示子节点点文本
    }
    }


    另有:
    using System;
    using System.IO;
    using System.Web;
    using System.Text;
    using System.Xml;
    using System.Collections;

     
    namespace ShopWeb.Class
    {
     /// <summary>
     /// Log 的摘要说明。
     /// </summary>
     public class Log
     {
      private XmlDocument xmlLog=new XmlDocument();
      private HttpContext context=HttpContext.Current;
      private string  xmlPath="";
      /// <summary>
      /// 构造函数
      /// </summary>
      /// <param name="XmlPath"></param>
      public Log(string XmlPath)
      {
       
       xmlPath=XmlPath;
       xmlLog.Load(context.Server.MapPath(XmlPath));
      }
      /// <summary>
      /// 增加一个节点,该节点由子节点构成
      /// </summary>
      /// <param name="HTChilds"></param>
      /// <param name="ParentName"></param>
      /// <returns></returns>
      public bool AddNodeByChild(Hashtable HTChilds ,string ParentName)
      {
       try
       {

        XmlNode Parent=xmlLog.CreateElement(ParentName);
                    XmlNode Child;
        IDictionaryEnumerator myEnumerator=HTChilds.GetEnumerator();
       
        while(myEnumerator.MoveNext())
        {
         Child=xmlLog.CreateElement(myEnumerator.Key.ToString());
         Child.InnerText=myEnumerator.Value.ToString();
         Parent.AppendChild(Child);
         xmlLog.DocumentElement.AppendChild(Parent);

        }
        xmlLog.Save(context.Server.MapPath(xmlPath));
        return true;
       }
       catch
       {
        return false;

       }
       

      }
      /// <summary>
      ///  增加一个节点 该节点由属性构成
      /// </summary>
      /// <param name="htAttributes"></param>
      /// <param name="NodeName"></param>
      /// <returns></returns>
      public bool AddNodeByAttribute(Hashtable htAttributes,string NodeName)
      {
      try
       {
       XmlNode AddNode=xmlLog.CreateElement(NodeName);
       IDictionaryEnumerator myEnumerator=htAttributes.GetEnumerator();
       XmlAttribute atr;
       while(myEnumerator.MoveNext())
       {
        atr=xmlLog.CreateAttribute(myEnumerator.Key.ToString());
        atr.InnerText=myEnumerator.Value.ToString();
        AddNode.Attributes.Append(atr);
        xmlLog.DocumentElement.AppendChild(AddNode);

       }
       xmlLog.Save(context.Server.MapPath(xmlPath));
       return true;
      }
      catch
      {
       return false;

      }


      }
      /// <summary>
      /// 或得指定查询节点得子节点数目
      /// </summary>
      /// <param name="QueryPath"></param>
      /// <returns></returns>
      public int ChildCount(string QueryPath)
      {
       try
       {
        XmlNode ResultNodes=xmlLog.SelectSingleNode(QueryPath);
        return ResultNodes.ChildNodes.Count;

       }
       catch
       {
        return -1;

       }
       
      }
         /// <summary>
         ///  删除指定路径的节点
         /// </summary>
         /// <param name="QueryPath"></param>
         /// <returns></returns>
      public bool DelelteNode(string QueryPath)
      {
       try
       {
        XmlNodeList ResultNodes=xmlLog.SelectNodes(QueryPath);
        for(int i=0;i<ResultNodes.Count;i++)
        {
         XmlNode ParentNode=ResultNodes[i].ParentNode;
         ParentNode.RemoveChild(ResultNodes[i]);

        }
        xmlLog.Save(context.Server.MapPath(xmlPath));
        return true;

       }
       catch
       {
        return false;
       }
       
      }
         /// <summary>
         /// 查询节点
         /// </summary>
         /// <param name="QueryPath"></param>
         /// <returns></returns>
      public XmlNodeList QueryNode(string QueryPath)
      {
       try
       {
        XmlNodeList ResultNodes=xmlLog.SelectNodes(QueryPath);
        return ResultNodes;
       }
       catch
       {
        return null;
       }
       

      }
     }
    }



  • 相关阅读:
    WF4.0 Beta1 自定义跟踪
    WF4.0 Beta1 流程设计器与Activity Designer
    新版本工作流平台的 (二) 权限算法(组织结构部分)
    WF4.0 Beta1 WorkflowInvoker
    WF4.0 基础篇 (十) Collection 集合操作
    WF4.0 基础篇 (十五) TransactionScope 事物容器
    WF4.0 基础篇 (六) 数据的传递 Arguments 参数
    WF4B1 的Procedural Activity 之InvokeMethod , InvokeMethod<T> 使用
    WF4.0 Beta1 异常处理
    WF4.0 Beta1 变量 Variables
  • 原文地址:https://www.cnblogs.com/heiyeqishi/p/2844291.html
Copyright © 2020-2023  润新知