zoukankan      html  css  js  c++  java
  • c# xml操作(一)

     

      1 c# xml操作(一)  此博文包含图片    (2011-05-05 14:57:41)转载▼
      2 标签: 杂谈    分类: c#
      3 同样是增,删,改,查四种操作。现在我们就详细介绍一下增和删两种操作。看下面的一个xml示例:
      4 <?xml version="1.0" encoding="utf-8"?>
      5 <phonebook>
      6   <member id="6">
      7     <name>456</name>
      8     <qq>5465</qq>
      9   </member>
     10   <member id="5">
     11     <name>jjjjj</name>
     12     <qq>3456789</qq>
     13   </member>
     14 </phonebook>
     15 
     16   xml的每个节点分为节点名称,节点值和属性三类,如:member节点:id为其一个属性,menber为其节点名称。再如:name节点456为其节点值。
     17 如果我们需要增加一个节点可以调用一下几个方法:
     18   /// <summary>
     19         /// 在根节点下添加父节点
     20         /// </summary>
     21         public static void AddParentNode(string xmlPath,string parentNode)
     22         {
     23             XmlDocument xdoc = new XmlDocument();
     24             xdoc.Load(xmlPath);
     25             // 创建一个新的menber节点并将它添加到根节点下
     26             XmlElement Node = xdoc.createElement_x(parentNode);
     27             xdoc.DocumentElement.PrependChild(Node);
     28             xdoc.Save(xmlPath);
     29         }
     30 
     31     #region 插入一节点,带一属性
     32         /// <summary>
     33         /// 插入一节点,带一属性
     34         /// </summary>
     35         /// <param name="xmlPath">Xml文档路径</param>
     36         /// <param name="MainNode">当前节点路径</param>
     37         /// <param name="Element">新节点</param>
     38         /// <param name="Attrib">属性名称</param>
     39         /// <param name="AttribContent">属性值</param>
     40         /// <param name="Content">新节点值</param>
     41         public static void XmlInsertElement(string xmlPath, string MainNode, string Element, string Attrib, string AttribContent, string Content)
     42         {
     43             XmlDocument objXmlDoc = new XmlDocument();
     44             objXmlDoc.Load(xmlPath);
     45             XmlNode objNode = objXmlDoc.SelectSingleNode(MainNode);
     46             XmlElement objElement = objXmlDoc.createElement_x(Element);
     47             objElement.SetAttribute(Attrib, AttribContent);
     48             objElement.InnerText = Content;
     49             objNode.AppendChild(objElement);
     50             objXmlDoc.Save(xmlPath);
     51         }
     52 
     53         #endregion
     54 
     55         #region 插入一节点不带属性
     56 
     57         public static void XmlInsertElement(string xmlPath, string MainNode, string Element, string Content)
     58         {
     59             XmlDocument objXmlDoc = new XmlDocument();
     60             objXmlDoc.Load(xmlPath);
     61             XmlNode objNode = objXmlDoc.SelectSingleNode(MainNode);
     62             XmlElement objElement = objXmlDoc.createElement_x(Element);
     63             objElement.InnerText = Content;
     64             objNode.AppendChild(objElement);
     65             objXmlDoc.Save(xmlPath);
     66         }
     67 
     68         #endregion
     69      #region 向一个节点添加属性
     70        /// <summary>
     71        /// 向一个节点添加属性
     72        /// </summary>
     73        /// <param name="xmlPath">xml文件路径</param>
     74        /// <param name="NodePath">节点路径</param>
     75        /// <param name="NodeAttribute1">要添加的节点属性的名称</param>
     76        /// <param name="NodeAttributeText">要添加属性的值</param>
     77         public static void AddAttribute(string xmlPath, string NodePath, string NodeAttribute1, string NodeAttributeText)
     78         {
     79             XmlDocument objXmlDoc = new XmlDocument();
     80             objXmlDoc.Load(xmlPath);
     81             XmlAttribute nodeAttribute = objXmlDoc.CreateAttribute(NodeAttribute1);
     82             XmlNode nodePath = objXmlDoc.SelectSingleNode(NodePath);
     83             nodePath.Attributes.Append(nodeAttribute);
     84             XmlElement xe = (XmlElement)nodePath;
     85             xe.SetAttribute(NodeAttribute1, NodeAttributeText);
     86             objXmlDoc.Save(xmlPath);
     87         }
     88         #endregion
     89 
     90 如想要加入一个member的父节点,属性id值为7你可以这样来做:
     91 //取得xml文件的路径
     92 string xmlPath = Server.MapPath("~/test.xml");
     93         string parentNode="member";
     94 //在根节点下添加父节点member
     95         XmlHelper.AddParentNode(xmlPath, parentNode);
     96 //刚添加的member节点添加一
     97         XmlHelper.AddAttribute(xmlPath, "phonebook/member", "id", "7");
     98 
     99 则xml文件就会变成这样
    100 
    101  
    102 <?xml version="1.0" encoding="utf-8"?>
    103 <phonebook>
    104   <member id="6">
    105     <name>456</name>
    106     <qq>5465</qq>
    107   </member>
    108   <member id="5">
    109     <name>jjjjj</name>
    110     <qq>3456789</qq>
    111   </member> 
    112     <member id="7">
    113   </member>
    114 </phonebook>
    115 
    116 向新添加的节点member(id=7)的节点下加入节点名称为qq,值为123456的新节点,你可以这样做
    117       
    118   XmlHelper.XmlInsertElement(xmlPath, "//member[@id="7"]", "qq", "123456");
    119 则输出的xml为:
    120 <?xml version="1.0" encoding="utf-8"?>
    121 <phonebook>
    122   <member id="6">
    123     <name>456</name>
    124     <qq>5465</qq>
    125   </member>
    126   <member id="5">
    127     <name>jjjjj</name>
    128     <qq>3456789</qq>
    129   </member> 
    130     <member id="7">
    131    <qq>123456</qq>
    132   </member>
    133 </phonebook>
    134 增加节点我们就介绍到这里,只要你基本掌握了xpath语法,融会贯通,就可以利用上面几个公用方法对xml文件进行增加操作
    135  
    136 
    137 下面我们介绍一下删除操作,删除共有两种,一是删除某一节点,一种是删除某一节点的属性。可以使用的方法如下:
    138  /// <summary>
    139         /// 删除XML节点和此节点下的子节点
    140         /// </summary>
    141         /// <param name="xmlPath">xml文档路径</param>
    142         /// <param name="Node">节点路径</param>
    143         public static void XmlNodeDelete(string xmlPath, string Node)
    144         {
    145             XmlDocument objXmlDoc = new XmlDocument();
    146             objXmlDoc.Load(xmlPath);
    147             string mainNode = Node.Substring(0, Node.LastIndexOf("/"));
    148             objXmlDoc.SelectSingleNode(mainNode).RemoveChild(objXmlDoc.SelectSingleNode(Node));
    149             objXmlDoc.Save(xmlPath);
    150         }
    151 
    152   #region 删除一个节点的属性
    153         /// <summary>
    154         /// 删除一个节点的属性
    155         /// </summary>
    156         /// <param name="xmlPath">文件路径</param>
    157         /// <param name="NodePath">节点路径(xpath)</param>
    158         /// <param name="NodeAttribute">属性名称</param>
    159         public static void xmlnNodeAttributeDel(string xmlPath, string NodePath, string NodeAttribute)
    160         {
    161             XmlDocument objXmlDoc = new XmlDocument();
    162             objXmlDoc.Load(xmlPath);
    163             XmlNode nodePath = objXmlDoc.SelectSingleNode(NodePath);
    164             XmlElement xe = (XmlElement)nodePath;
    165             xe.RemoveAttribute(NodeAttribute);
    166             objXmlDoc.Save(xmlPath);
    167 
    168         }
    169         #endregion
    170 如要删除属性id值为5的节点(包括其子节点),我们可以这样做:
    171     string xmlPath = Server.MapPath("~/test.xml");
    172         XmlHelper.XmlNodeDelete(xmlPath, "phonebook / member[@id="5"]");
    173 这时xml文件将变为:
    174 <?xml version="1.0" encoding="utf-8"?>
    175 <phonebook>
    176   <member id="6">
    177     <name>456</name>
    178     <qq>5465</qq>
    179   </member>
    180   <member id="5">
    181     <name>jjjjj</name>
    182     <qq>3456789</qq>
    183   </member> 
    184     <member id="7">
    185    <qq>123456</qq>
    186   </member>
    187 </phonebook>
    188 假如我们向id=6的父节点下子节点qq节点加一属性sex值为‘男‘,从上面可以看出这是可以可以做到的,则xml文件就变为:
    189 <?xml version="1.0" encoding="utf-8"?>
    190 <phonebook>
    191   <member id="6">
    192     <name>456</name>
    193     <qq sex=''>5465</qq>
    194   </member>
    195   <member id="5">
    196     <name>jjjjj</name>
    197     <qq>3456789</qq>
    198   </member> 
    199     <member id="7">
    200    <qq>123456</qq>
    201   </member>
    202 </phonebook>
    203 
    204 假如我们要删除sex=“男”,我们可以这样做 :
    205         XmlHelper.xmlnNodeAttributeDel(xmlPath, "//member[qq='5465']/qq", 'sex');
    206 //也可以
    207 XmlHelper.xmlnNodeAttributeDel(xmlPath, "//member[@id='6']/qq", 'sex');
    目前还在学习中,希望会对大家有所帮助,觉得不错,就点赞支持一下。 另外,转载时请附带链接。谢谢!
  • 相关阅读:
    windows安装php的redis扩展及测试(适合php个各个版本)
    golang+linux+pipline
    泰勒展开式
    微积分
    矩阵
    learning rate warmup实现
    python asyncio as_completed
    python asyncio run_until_complete
    python asyncio 使用ThreadPoolExecutor和asyncio完成阻塞IO请求
    python asyncio call_soon, call_at, call_later
  • 原文地址:https://www.cnblogs.com/dangkai/p/7874236.html
Copyright © 2011-2022 走看看