最近在wrox的网站上下了很多代码,一直没时间来看,碰好今天是星期天,闲下来看看里面的代码学点东西.wrox的例子总是循序渐进,所以很容易理解.
一.创建XML读取器.
在.net2.0中用新的方法Create()创建XML实例
第一个例子读取,XML文件的元素值,如<item>
1<%@ Page Language="C#" %>
2<%@ Import Namespace="System.Xml" %>
3<script runat="server">
4 void Page_Load(object sender, EventArgs e)
5 {
6 //XML文件路径
7 string xmlFilePath = Request.PhysicalApplicationPath + @"/Employees.xml";
8 try
9 {
10 //创建XmlReader实例
11 using (XmlReader reader = XmlReader.Create(xmlFilePath))
12 {
13 string result;
14 while (reader.Read())
15 {
16
17 //判断节点类型
18 if (reader.NodeType == XmlNodeType.Element)
19 {
20
21 result = "";
22 Response.Write(reader.Depth + "<br>");
23 //根据深度,显示效果
24 for (int count = 1; count <= reader.Depth; count++)
25 {
26
27 result += "==";
28 }
29 //返回节点的限定名
30 result += "=> " + reader.Name + "<br/>";
31 lblResult.Text += result;
32 }
33 }
34 }
35 }
36 catch (Exception ex)
37 {
38 lblResult.Text = "发生错误: " + ex.Message;
39 }
40 }
41
42</script>
43
44<html xmlns="http://www.w3.org/1999/xhtml" >
45<head runat="server">
46 <title>利用XmlReader读取XML</title>
47</head>
48<body>
49 <form id="form1" runat="server">
50 <div>
51 <asp:label id="lblResult" runat="server" />
52 </div>
53 </form>
54</body>
55</html>
56
显示效果如下
首先创建XmlReader实例
根据reader.Depth深度值返回值其name,Depth就是是返回元素从跟节点开始所在的位置,如下面的XML文件
emplpyees的depth为0,emplyoee的depth为1,name的德depth为2,firstName和lastName的depth为3
下面看一下name属性
name获取当前节点的限定名,返回的名称取决于节点的 NodeType,上面的 NodeType类型为Element(标记名),所以返回标记名.
接着继续看第二个例子,读取标记中的属性,根据上面的例子延伸
这个例子比上面多了几行代码,从判断节点属性是否存在开始.获取属性数AttributeCount,
然后根据属性位置MoveToAttribute()返回属性名称. 最后还有一个reader.MoveToElement()方法,当在派生类中被重写时,移动到包含当前属性节点的元素
其返回一个布尔值 如果拿掉这句话以Response.Write(reader.MoveToElement());代替的话,其值为true表示读取器定位在属性上,
添加这个方法的话返回值为false即读取器不是定位在属性上
大家可以测试一下.了解上面几个属性和方法就应该明白怎么读取的了.
例子继续.
第三个例子继续深入,读取XML元素值和属性值,也先来看一下代码
1<%@ Page Language="C#" %>
2<%@ Import Namespace="System.Xml" %>
3<script runat="server">
4 void Page_Load(object sender, EventArgs e)
5 {
6 //XML文件路径
7 string xmlFilePath = Request.PhysicalApplicationPath + @"/Employees.xml";
8 string employeeID = "";
9 try
10 {
11 //创建XmlReader实例
12 using (XmlReader reader = XmlReader.Create(xmlFilePath))
13 {
14
15 lblResult.Text = "<b>Employees</b>";
16 lblResult.Text += "<ul/>";
17 string result;
18 while (reader.Read())
19 {
20 if (reader.NodeType == XmlNodeType.Element)
21 {
22 if (reader.Name == "employee")
23 {
24 //读取属性值
25 employeeID = reader.GetAttribute("id");
26 }
27 if (reader.Name == "name")
28 {
29 lblResult.Text += "<li>" + "Employee - " + employeeID;
30 lblResult.Text += "<ul>";
31 lblResult.Text += "<li>ID - " + employeeID + "</li>";
32 }
33 if (reader.Name == "firstName")
34 {
35 //读取把节点内容以字符串形式读取
36 lblResult.Text += "<li>First Name - " + reader.ReadString() + "</li>";
37 }
38 if (reader.Name == "lastName")
39 {
40 lblResult.Text += "<li>Last Name - " + reader.ReadString() + "</li>";
41 }
42 if (reader.Name == "city")
43 {
44 lblResult.Text += "<li>City - " + reader.ReadString() + "</li>";
45 }
46 if (reader.Name == "state")
47 {
48 lblResult.Text += "<li>State - " + reader.ReadString() + "</li>";
49 }
50 if (reader.Name == "zipCode")
51 {
52 lblResult.Text += "<li>Zipcode - " + reader.ReadElementContentAsInt().ToString() + "</li>";
53 }
54 }
55 //末尾节点
56 else if (reader.NodeType == XmlNodeType.EndElement)
57 {
58 if (reader.Name == "employee")
59 {
60
61 lblResult.Text += "</ul>";
62 lblResult.Text += "</li>";
63 }
64 }
65 }
66 lblResult.Text += "</ul>";
67 }
68 }
69 catch (Exception ex)
70 {
71 lblResult.Text = "发生错误: " + ex.Message;
72 }
73 }
74</script>
75
76<html xmlns="http://www.w3.org/1999/xhtml" >
77<head runat="server">
78 <title>读取属性值</title>
79</head>
80<body>
81 <form id="form1" runat="server">
82 <div>
83 <asp:label id="lblResult" runat="server" />
84 </div>
85 </form>
86</body>
87</html>
88
先熟悉几个方法
GetAttribute 方法 获取属性的值
ReadString 方法 将元素或文本节点的内容当做字符串读取
ReadElementContentAsInt 方法 读取当前元素并将内容作为 32 位有符号整数返回
这个例子是根据元素一个一个进行判断,再获取值的.最后还要判断是否XML文件结尾判断节点类型是否为EndElement末尾元素标记.
接着还有最后一个例子,其实是介绍XmlReaderSettings.
这个对象可以设定XML的一些功能.比如是否忽略空白,注释
具体的还得看MSDN,可能我说的很多都不对,只是把自己学习的过程记录下来.也希望对大家有帮助
一.创建XML读取器.
在.net2.0中用新的方法Create()创建XML实例
第一个例子读取,XML文件的元素值,如<item>
1<%@ Page Language="C#" %>
2<%@ Import Namespace="System.Xml" %>
3<script runat="server">
4 void Page_Load(object sender, EventArgs e)
5 {
6 //XML文件路径
7 string xmlFilePath = Request.PhysicalApplicationPath + @"/Employees.xml";
8 try
9 {
10 //创建XmlReader实例
11 using (XmlReader reader = XmlReader.Create(xmlFilePath))
12 {
13 string result;
14 while (reader.Read())
15 {
16
17 //判断节点类型
18 if (reader.NodeType == XmlNodeType.Element)
19 {
20
21 result = "";
22 Response.Write(reader.Depth + "<br>");
23 //根据深度,显示效果
24 for (int count = 1; count <= reader.Depth; count++)
25 {
26
27 result += "==";
28 }
29 //返回节点的限定名
30 result += "=> " + reader.Name + "<br/>";
31 lblResult.Text += result;
32 }
33 }
34 }
35 }
36 catch (Exception ex)
37 {
38 lblResult.Text = "发生错误: " + ex.Message;
39 }
40 }
41
42</script>
43
44<html xmlns="http://www.w3.org/1999/xhtml" >
45<head runat="server">
46 <title>利用XmlReader读取XML</title>
47</head>
48<body>
49 <form id="form1" runat="server">
50 <div>
51 <asp:label id="lblResult" runat="server" />
52 </div>
53 </form>
54</body>
55</html>
56
显示效果如下
首先创建XmlReader实例
根据reader.Depth深度值返回值其name,Depth就是是返回元素从跟节点开始所在的位置,如下面的XML文件
<?
xml version='1.0'
?>
< employees >
< employee id ="1" >
< name >
< firstName > Nancy </ firstName >
< lastName > Davolio </ lastName >
</ name >
< city > Seattle </ city >
< state > WA </ state >
< zipCode > 98122 </ zipCode >
</ employee >
< employee id ="2" >
< name >
< firstName > Andrew </ firstName >
< lastName > Fuller </ lastName >
</ name >
< city > Tacoma </ city >
< state > WA </ state >
< zipCode > 98401 </ zipCode >
</ employee >
</ employees >
< employees >
< employee id ="1" >
< name >
< firstName > Nancy </ firstName >
< lastName > Davolio </ lastName >
</ name >
< city > Seattle </ city >
< state > WA </ state >
< zipCode > 98122 </ zipCode >
</ employee >
< employee id ="2" >
< name >
< firstName > Andrew </ firstName >
< lastName > Fuller </ lastName >
</ name >
< city > Tacoma </ city >
< state > WA </ state >
< zipCode > 98401 </ zipCode >
</ employee >
</ employees >
emplpyees的depth为0,emplyoee的depth为1,name的德depth为2,firstName和lastName的depth为3
下面看一下name属性
name获取当前节点的限定名,返回的名称取决于节点的 NodeType,上面的 NodeType类型为Element(标记名),所以返回标记名.
接着继续看第二个例子,读取标记中的属性,根据上面的例子延伸
<%
@ Page Language
=
"
C#
"
%>
<% @ Import Namespace = " System.Xml " %>
< script runat = " server " >
void Page_Load( object sender, EventArgs e)
{
//XML文件路径
string xmlFilePath = Request.PhysicalApplicationPath + @"/Employees.xml";
try
{
//创建XmlReader实例
using (XmlReader reader = XmlReader.Create(xmlFilePath))
{
string result;
while (reader.Read())
{
//判断节点类型
if (reader.NodeType == XmlNodeType.Element)
{
result = "";
for (int count = 1; count <= reader.Depth; count++)
{
result += "===";
}
result += "=> " + reader.Name;
lblResult.Text += result;
// 判断节点是否有属性存在
if (reader.HasAttributes)
{
lblResult.Text += " (";
Response.Write("<br>"+reader.AttributeCount);
for (int count = 0; count < reader.AttributeCount; count++)
{
//索引属性
reader.MoveToAttribute(count);
lblResult.Text += reader.Name+",";
}
lblResult.Text += ")";
//索引当前属性节点
reader.MoveToElement();
}
lblResult.Text += "<br/>";
}
}
}
}
catch (Exception ex)
{
lblResult.Text = "发生错误: " + ex.Message;
}
}
</ script >
< html xmlns = " http://www.w3.org/1999/xhtml " >
< head runat = " server " >
< title > 读取XML属性 </ title >
</ head >
< body >
< form id = " form1 " runat = " server " >
< div >
< asp:label id = " lblResult " runat = " server " />
</ div >
</ form >
</ body >
</ html >
<% @ Import Namespace = " System.Xml " %>
< script runat = " server " >
void Page_Load( object sender, EventArgs e)
{
//XML文件路径
string xmlFilePath = Request.PhysicalApplicationPath + @"/Employees.xml";
try
{
//创建XmlReader实例
using (XmlReader reader = XmlReader.Create(xmlFilePath))
{
string result;
while (reader.Read())
{
//判断节点类型
if (reader.NodeType == XmlNodeType.Element)
{
result = "";
for (int count = 1; count <= reader.Depth; count++)
{
result += "===";
}
result += "=> " + reader.Name;
lblResult.Text += result;
// 判断节点是否有属性存在
if (reader.HasAttributes)
{
lblResult.Text += " (";
Response.Write("<br>"+reader.AttributeCount);
for (int count = 0; count < reader.AttributeCount; count++)
{
//索引属性
reader.MoveToAttribute(count);
lblResult.Text += reader.Name+",";
}
lblResult.Text += ")";
//索引当前属性节点
reader.MoveToElement();
}
lblResult.Text += "<br/>";
}
}
}
}
catch (Exception ex)
{
lblResult.Text = "发生错误: " + ex.Message;
}
}
</ script >
< html xmlns = " http://www.w3.org/1999/xhtml " >
< head runat = " server " >
< title > 读取XML属性 </ title >
</ head >
< body >
< form id = " form1 " runat = " server " >
< div >
< asp:label id = " lblResult " runat = " server " />
</ div >
</ form >
</ body >
</ html >
这个例子比上面多了几行代码,从判断节点属性是否存在开始.获取属性数AttributeCount,
然后根据属性位置MoveToAttribute()返回属性名称. 最后还有一个reader.MoveToElement()方法,当在派生类中被重写时,移动到包含当前属性节点的元素
其返回一个布尔值 如果拿掉这句话以Response.Write(reader.MoveToElement());代替的话,其值为true表示读取器定位在属性上,
添加这个方法的话返回值为false即读取器不是定位在属性上
reader.MoveToElement();
Response.Write(reader.MoveToElement());
Response.Write(reader.MoveToElement());
大家可以测试一下.了解上面几个属性和方法就应该明白怎么读取的了.
例子继续.
第三个例子继续深入,读取XML元素值和属性值,也先来看一下代码
1<%@ Page Language="C#" %>
2<%@ Import Namespace="System.Xml" %>
3<script runat="server">
4 void Page_Load(object sender, EventArgs e)
5 {
6 //XML文件路径
7 string xmlFilePath = Request.PhysicalApplicationPath + @"/Employees.xml";
8 string employeeID = "";
9 try
10 {
11 //创建XmlReader实例
12 using (XmlReader reader = XmlReader.Create(xmlFilePath))
13 {
14
15 lblResult.Text = "<b>Employees</b>";
16 lblResult.Text += "<ul/>";
17 string result;
18 while (reader.Read())
19 {
20 if (reader.NodeType == XmlNodeType.Element)
21 {
22 if (reader.Name == "employee")
23 {
24 //读取属性值
25 employeeID = reader.GetAttribute("id");
26 }
27 if (reader.Name == "name")
28 {
29 lblResult.Text += "<li>" + "Employee - " + employeeID;
30 lblResult.Text += "<ul>";
31 lblResult.Text += "<li>ID - " + employeeID + "</li>";
32 }
33 if (reader.Name == "firstName")
34 {
35 //读取把节点内容以字符串形式读取
36 lblResult.Text += "<li>First Name - " + reader.ReadString() + "</li>";
37 }
38 if (reader.Name == "lastName")
39 {
40 lblResult.Text += "<li>Last Name - " + reader.ReadString() + "</li>";
41 }
42 if (reader.Name == "city")
43 {
44 lblResult.Text += "<li>City - " + reader.ReadString() + "</li>";
45 }
46 if (reader.Name == "state")
47 {
48 lblResult.Text += "<li>State - " + reader.ReadString() + "</li>";
49 }
50 if (reader.Name == "zipCode")
51 {
52 lblResult.Text += "<li>Zipcode - " + reader.ReadElementContentAsInt().ToString() + "</li>";
53 }
54 }
55 //末尾节点
56 else if (reader.NodeType == XmlNodeType.EndElement)
57 {
58 if (reader.Name == "employee")
59 {
60
61 lblResult.Text += "</ul>";
62 lblResult.Text += "</li>";
63 }
64 }
65 }
66 lblResult.Text += "</ul>";
67 }
68 }
69 catch (Exception ex)
70 {
71 lblResult.Text = "发生错误: " + ex.Message;
72 }
73 }
74</script>
75
76<html xmlns="http://www.w3.org/1999/xhtml" >
77<head runat="server">
78 <title>读取属性值</title>
79</head>
80<body>
81 <form id="form1" runat="server">
82 <div>
83 <asp:label id="lblResult" runat="server" />
84 </div>
85 </form>
86</body>
87</html>
88
先熟悉几个方法
GetAttribute 方法 获取属性的值
ReadString 方法 将元素或文本节点的内容当做字符串读取
ReadElementContentAsInt 方法 读取当前元素并将内容作为 32 位有符号整数返回
这个例子是根据元素一个一个进行判断,再获取值的.最后还要判断是否XML文件结尾判断节点类型是否为EndElement末尾元素标记.
接着还有最后一个例子,其实是介绍XmlReaderSettings.
这个对象可以设定XML的一些功能.比如是否忽略空白,注释
1
XmlReaderSettings settings
=
new
XmlReaderSettings();
2 settings.IgnoreComments = true ;
3 settings.IgnoreWhitespace = true ;
4 XmlReader reader = XmlReader.Create(xmlFilePath, settings)
2 settings.IgnoreComments = true ;
3 settings.IgnoreWhitespace = true ;
4 XmlReader reader = XmlReader.Create(xmlFilePath, settings)
具体的还得看MSDN,可能我说的很多都不对,只是把自己学习的过程记录下来.也希望对大家有帮助