使用XmlReader类
1.创建XmlReader对象
XmlReader是一个抽象类,所以,要使用XmlReader类,必须使用静态方法Create,该方法返回一个XmlReader对象。Crate方法有许多重装版本,最常用的是,使用字符串参数,输入一个XmlDocument的文件名。另外一个是基于流创建。
2.Read方法
遍历文档。代码:
返回的结果:
3.ReadElementString方法
Read a text-only element,代码:
返回结果:
4.XmlReader类还可以读取强类型化的数据,它有几个ReadElementContent方法,如:ReadElementContentAsDouble,ReadElementContentASBoolean等。下面代码说明如何把值读取为小数。
(注:.net3.5的方法中加了个As,更易理解)
返回结果:
5.读取属性数据:
在读取节点的时候,没有看到属性,因为属性不是文档结构的一部分。针对元素节点,可以检查属性是否存在,并可读取属性值。代码:
返回结果:
book.xml
XmlReader是一个抽象类,所以,要使用XmlReader类,必须使用静态方法Create,该方法返回一个XmlReader对象。Crate方法有许多重装版本,最常用的是,使用字符串参数,输入一个XmlDocument的文件名。另外一个是基于流创建。
2.Read方法
遍历文档。代码:
1XmlReader reader = XmlReader.Create("book.xml");
2while (reader.Read())
3 if (reader.NodeType == XmlNodeType.Text)
4 Console.WriteLine(reader.Value);
2while (reader.Read())
3 if (reader.NodeType == XmlNodeType.Text)
4 Console.WriteLine(reader.Value);
返回的结果:
The Autobiography of Benjamin Franklin
Benjamin
Franklin
8.99
The confidence Man
Herman
Melville
11.99
The Gorgias
Palto
9.99
Benjamin
Franklin
8.99
The confidence Man
Herman
Melville
11.99
The Gorgias
Palto
9.99
3.ReadElementString方法
Read a text-only element,代码:
1FileStream fs = new FileStream("book.xml", FileMode.Open);
2XmlReader tr = XmlReader.Create(fs);
3
4while (!tr.EOF)
5{
6 if (tr.MoveToContent() == XmlNodeType.Element && tr.Name == "title")
7 Console.WriteLine(tr.ReadElementString());
8 else
9 tr.Read();
10}
2XmlReader tr = XmlReader.Create(fs);
3
4while (!tr.EOF)
5{
6 if (tr.MoveToContent() == XmlNodeType.Element && tr.Name == "title")
7 Console.WriteLine(tr.ReadElementString());
8 else
9 tr.Read();
10}
返回结果:
The Autobiography of Benjamin Franklin
The confidence Man
The Gorgias
The confidence Man
The Gorgias
4.XmlReader类还可以读取强类型化的数据,它有几个ReadElementContent方法,如:ReadElementContentAsDouble,ReadElementContentASBoolean等。下面代码说明如何把值读取为小数。
(注:.net3.5的方法中加了个As,更易理解)
1XmlReader reader = XmlReader.Create("book.xml");
2while (reader.Read())
3{
4 if (reader.Name == "price")
5 {
6 decimal price = reader.ReadElementContentAsDecimal();
7 Console.WriteLine("Current price = " + price);
8 price += price * 0.25M;
9 Console.WriteLine("New price= " + price);
10 }
11 else if (reader.Name == "title")
12 Console.WriteLine(reader.ReadElementString());
13}
2while (reader.Read())
3{
4 if (reader.Name == "price")
5 {
6 decimal price = reader.ReadElementContentAsDecimal();
7 Console.WriteLine("Current price = " + price);
8 price += price * 0.25M;
9 Console.WriteLine("New price= " + price);
10 }
11 else if (reader.Name == "title")
12 Console.WriteLine(reader.ReadElementString());
13}
返回结果:
The Autobiography of Benjamin Franklin
Current price = 8.99
New price= 11.2375
The confidence Man
Current price = 11.99
New price= 14.9875
The Gorgias
Current price = 9.99
New price= 12.4875
Current price = 8.99
New price= 11.2375
The confidence Man
Current price = 11.99
New price= 14.9875
The Gorgias
Current price = 9.99
New price= 12.4875
5.读取属性数据:
在读取节点的时候,没有看到属性,因为属性不是文档结构的一部分。针对元素节点,可以检查属性是否存在,并可读取属性值。代码:
1XmlReader reader = XmlReader.Create("book.xml");
2while (reader.Read())
3{
4 if (reader.NodeType == XmlNodeType.Element)
5 {
6 //Console.WriteLine(reader.HasAttributes);
7 if (reader.HasAttributes)
8 {
9 for (int i = 0; i < reader.AttributeCount; i++)
10 Console.WriteLine(reader.GetAttribute(i));
11 }
12 }
13}
2while (reader.Read())
3{
4 if (reader.NodeType == XmlNodeType.Element)
5 {
6 //Console.WriteLine(reader.HasAttributes);
7 if (reader.HasAttributes)
8 {
9 for (int i = 0; i < reader.AttributeCount; i++)
10 Console.WriteLine(reader.GetAttribute(i));
11 }
12 }
13}
返回结果:
autobiography
1981
1-861003-21-2
novel
1967
0-201-63361-2
philosophy
1991
1-8610001-57-6
1981
1-861003-21-2
novel
1967
0-201-63361-2
philosophy
1991
1-8610001-57-6
book.xml
Code