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');

 

posted @ 2017-11-21 17:15  (时光)光阴飞逝  阅读(322)  评论(0编辑  收藏  举报