您的位置:首页 > 其它

.NET操作XML文件:XML文件节点的增删改

2007-07-16 16:58 489 查看
【标题.NET操作XML文件:XML文件节点的增删改

【准备】
1、创建一个Web 窗体
2、创建一个xml文件 joyo_bookstore.xml

【源码示例】
A、joyo_bookstore.xml 文件

1

<?xml version="1.0" encoding="gb2312"?>
2

<bookstore>
3

<book genre="david" ISBN="2-3631-5">
4

<title>david-blogs life</title>
5

<author>david</author>
6

<price>58.3</price>
7

</book>
8

</bookstore>

B、C#源代码(在Web 窗体中添加三个Button)

1 #region 生产XmlDocument对象
2 protected XmlDocument createXmlDoc()
3 {
4 XmlDocument xmldoc=new XmlDocument ();
5 xmldoc.Load ("D://work//woall_last//Test//xml//joyo_bookstore.xml");
6
7 return xmldoc;
8 }
9
10 #endregion
11
12 #region 添加XML文件节点
13 private void Button1_Click(object sender, System.EventArgs e)
14 {
15 XmlDocument xmldoc = createXmlDoc();
16
17 /*===============函数原型======================================
18 * public System.Xml.XmlNode SelectSingleNode(string xpath)
19 System.Xml.XmlNode 的成员
20 摘要:
21 选择匹配 XPath 表达式的第一个 XmlNode。
22 参数:
23 xpath: XPath 表达式。
24 返回值:
25 与 XPath 查询匹配的第一个 XmlNode;如果未找到任何匹配节点,则为null。
26 * 不应该要求将 XmlNode “实时”连接到 XML 文档。
27 * 也就是说,XML 文档中的更改不会出现在 XmlNode 中,反之亦然。
28
29 =======================================================*/
30
31 //获得根节点
32 XmlNode root = xmldoc.SelectSingleNode("bookstore");
33
34
35 /*================函数原型=============================
36 * public System.Xml.XmlElement CreateElement(string name)
37 System.Xml.XmlDocument 的成员
38 摘要:
39 创建具有指定名称的元素。
40
41 参数:
42 name: 元素的限定名。如果名称包含冒号,
43 * 则 System.Xml.XmlNode.Prefix 属性反映名称中位于冒号之前的部分,
44 * System.Xml.XmlDocument.LocalName 属性反映名称中位于冒号之后的部分。
45 * 限定名不能包含“xmlns”前缀。
46 返回值:
47 新的 XmlElement。
48 ================================================*/
49 //创建一个<book>节点
50 XmlElement xe1 = xmldoc.CreateElement("book");
51
52 //设置该节点genre属性
53 xe1.SetAttribute("genre", "AXzhz");
54 //设置该节点ISBN属性
55 xe1.SetAttribute("ISBN", "2-3631-4");
56
57 XmlElement xesub1 = xmldoc.CreateElement("title");
58 //设置文本节点
59 xesub1.InnerText = "AXzhz-blogs life";
60
61 //添加到<book>节点中
62 xe1.AppendChild(xesub1);
63
64 XmlElement xesub2 = xmldoc.CreateElement("author");
65 xesub2.InnerText = "AXzhz";
66 xe1.AppendChild(xesub2);
67
68 XmlElement xesub3 = xmldoc.CreateElement("price");
69 xesub3.InnerText = "58.3";
70 xe1.AppendChild(xesub3);
71
72 //添加到根节点<bookstore>中
73 root.AppendChild(xe1);
74
75 xmldoc.Save("D://work//woall_last//Test//xml//joyo_bookstore.xml");
76 }
77 #endregion
78
79 #region 删除XML文件中的节点属性或节点
80 private void Button2_Click(object sender, System.EventArgs e)
81 {
82 XmlDocument xmldoc= createXmlDoc();
83
84 //获得bookstore的所有根节点并遍历
85 XmlNodeList xnl = xmldoc.SelectSingleNode("bookstore").ChildNodes;
86 foreach (XmlNode xn in xnl)
87 {
88 XmlElement xe = (XmlElement)xn;
89
90 if (xe.GetAttribute("genre") == "david")
91 {
92 //删除genre属性
93 xe.RemoveAttribute("genre");
94
95 }
96 else if(xe.GetAttribute("genre") == "update david")
97 {
98 //删除该节点的全部内容
99 //注意:这xe是XmlElement对象,它的方法RemoveAll移除节点的所有指定属性和子节点,不移除默认属性
100 xe.RemoveAll();
101 }
102
103 }
104 xmldoc.Save("D://work//woall_last//Test//xml//joyo_bookstore.xml");
105 }
106 #endregion
107
108 #region 修改XML文件的节点:修改book节点的genre属性由david到update david , book子节点author由david到david weihw
109 private void Button3_Click(object sender, System.EventArgs e)
110 {
111 XmlDocument xmldoc=createXmlDoc();
112
113 //获取bookstore节点的所有子节点
114 XmlNodeList nodeList = xmldoc.SelectSingleNode("bookstore").ChildNodes;
115
116 //遍历所有子节点
117 foreach (XmlNode xn in nodeList)
118 {
119 //将子节点类型转换为XmlElement类型
120 XmlElement xe = (XmlElement)xn;
121
122 if (xe.GetAttribute("genre") == "david")
123 {
124 //修改book节点的genre属性
125 xe.SetAttribute("genre", "update david");
126
127 //取xe子节点(xe为book节点)的所有子节点
128 XmlNodeList nls = xe.ChildNodes;
129
130 foreach (XmlNode xn1 in nls)
131 {
132
133 XmlElement xe2 = (XmlElement)xn1;
134
135 if (xe2.Name == "author")
136 {
137 //修改book子节点author由david到david weihw
138 xe2.InnerText = "david weihw";
139 break;
140 }
141
142 }
143 break;
144 }
145
146 }
147 xmldoc.Save("D://work//woall_last//Test//xml//joyo_bookstore.xml");
148
149 }
150 #endregion

【执行结果】

1、执行Button1_Click方法后,joyo_bookstore.xml文件为

1

<?xml version="1.0" encoding="gb2312"?>
2

<bookstore>
3

<book genre="david" ISBN="2-3631-5">
4

<title>david-blogs life</title>
5

<author>david</author>
6

<price>58.3</price>
7

</book>
8

<book genre="AXzhz" ISBN="2-3631-4">
9

<title>AXzhz-blogs life</title>
10

<author>AXzhz</author>
11

<price>58.3</price>
12

</book>
13

</bookstore>

2、执行Button3_Click方法后,joyo_bookstore.xml文件为

1 <?xml version="1.0" encoding="gb2312"?>
2 <bookstore>
3 <book genre="update david" ISBN="2-3631-5">
4 <title>david-blogs life</title>
5 <author>david weihw</author>
6 <price>58.3</price>
7 </book>
8 <book genre="AXzhz" ISBN="2-3631-4">
9 <title>AXzhz-blogs life</title>
10 <author>AXzhz</author>
11 <price>58.3</price>
12 </book>
13 </bookstore>

3、执行Button2_Click方法后,joyo_bookstore.xml文件为

1 <?xml version="1.0" encoding="gb2312"?>
2 <bookstore>
3 <book>
4 </book>
5 <book genre="AXzhz" ISBN="2-3631-4">
6 <title>AXzhz-blogs life</title>
7 <author>AXzhz</author>
8 <price>58.3</price>
9 </book>
10 </bookstore>

【总结】
1、在XmlDocument.Load方法中,可以使用物理绝对路径D://work//woall_last//Test//xml//joyo_bookstore.xml
或使用URL格式地址,比如http://test.fenlei.cn/Test/xml/joyo_bookstore.xml

如果直接使用相对路径joyo_bookstore.xml,会发生异常:

未能找到文件“c:/windows/system32/inetsrv/joyo_bookstore.xml”。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.IO.FileNotFoundException: 未能找到文件“c:/windows/system32/inetsrv/joyo_bookstore.xml”。

2、对象XmlElement 和XmlNode 的RemoveAll只能移除节点的属性与所有子节点。

3、在实际的开发过程中,可以把上述的方法封装成操作XML的类,实现代码的复用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: