读取XML元素值
XmlReader提供了以下所示的方法可供使用
IsStartElement (检查当前节点是否是开始标记或空的元素标记)
ReadStartElement (检查当前节点是否为元素并将读取器推进到下一个节点)
ReadEndElement (检查当前节点是否为结束标记并将读取器推进到下一个节点)
ReadElementString (读取纯文本元素)
ReadToDescendant (将XmlReader前进到具有指定名称的下一个子代元素)
ReadToNextSibling (将XmlReader前进到具有指定名称的下一个同辈元素)
IsEmptyElement (检查当前元素是否包含空的元素标记)
下面的步骤展示了使用ReadStartElement方法读取XML文件的方式:(介绍如何使用ReadStartElement读取元素值和如何循环读取所有元素)
using System.Xml;
{
static void Main(string[ ] args)
{
string path =@ "c:\mail.xml";//XML文件路径
//尝试读取该XML文件
try
{
XmlReader myReader=XmlReader.Create(path);//初始化myReader的实例
myReader.ReadStartElement("mail");//读取mail节点
myReader.ReadStartElement("date");//读取date节点
//读取month节点,输出并结束当前节点
myReader.ReadStartElement("month");
Console.WriteLine("month中包含的内容是: ");
Console.WriteLine(myReader.ReadString());
myReader.ReadEndElement();
//读取day节点,输出并结束当前节点
myReader.ReadStartElement("day");
Console.WriteLine("day中包含的内容是: ");
Console.WriteLine(myReader.ReadString());
myReader.ReadEndElement();
myReader.ReadEndElement();//结束mail节点
catch(Exception e)
{
Console.WriteLine(e.Message);
}
Console.ReadLine();
}
}
}
可以看到虽然正确地获得了XML文件中各个元素的值,但是确非常烦琐。事实上,XmlReader还提供了另一种读取XML文件的方法,其步骤如下:
using System.Xml;
class program
{
static void Main(string[ ] args)
{
string path = @ "c:\mail.xml";//XML文件路径
//尝试读取该XML文件
try
{
//初始化myReader的实例
XmlReader myReader = XmlReader.Create(path);
//当myReader.Read为真的时候读取XML文件中的内容
while (myReader.Read())
{
if(myReader.IsStartElement())
{
if(myReader.IsEmptyElement)
Console.WriteLine("<{0}/>",myReader.Name);
else
{
Console.Write("<{0}>",myReader.Name);
myReader.Read();
if(myReader.IsStartElement())
Console.Write("\r\n<{0}>",myReader.Name);
Console.Write(myReader.ReadString());
Console.WriteLine("</{0}>",myReader.Name);
}
}
}
Console.WriteLine("</mail>");
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
Console.ReadLine();
}
}
程序采用循环的方式依次读取XML文档的内容,但是只支持最多两层的嵌套。