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