一.创建XML读取器.
在.net2.0中用新的方法Create()创建XML实例
第一个例子读取,XML文件的元素值,如<item>
显示效果如下
首先创建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元素值和属性值,也先来看一下代码
先熟悉几个方法
GetAttribute 方法 获取属性的值
ReadString 方法 将元素或文本节点的内容当做字符串读取
ReadElementContentAsInt 方法 读取当前元素并将内容作为 32 位有符号整数返回
这个例子是根据元素一个一个进行判断,再获取值的.最后还要判断是否XML文件结尾判断节点类型是否为EndElement末尾元素标记.
接着还有最后一个例子,其实是介绍XmlReaderSettings.
这个对象可以设定XML的一些功能.比如是否忽略空白,注释
1XmlReaderSettings settings = new XmlReaderSettings();
2settings.IgnoreComments = true;
3settings.IgnoreWhitespace = true;
4XmlReader reader = XmlReader.Create(xmlFilePath, settings)
2settings.IgnoreComments = true;
3settings.IgnoreWhitespace = true;
4XmlReader reader = XmlReader.Create(xmlFilePath, settings)
具体的还得看MSDN,可能我说的很多都不对,只是把自己学习的过程记录下来.也希望对大家有帮助