使用.NET读取XML文件

** 介绍 ** ** **

本文中我将介绍在 ASP.NET 应用程序中如何读取 XML 文件,这是一个十分有用的技巧。使用这个技巧,我们能够定制我们的应用程序的配置文件,也可以读取那些保存在 XML 文件中的数据。

** 概论 ** ** **

下面的代码将使用 XmlTextReader 对象将磁盘文件中的数据读取到 XmlDocument 对象中。 XmlTextReader 对象在功能上和 StreamReader 及 BinaryReader 对象十分相似,只不过它是专为读取 XML 文件而特别设计的。除此以外, XmlTextReader 对象还有其他一些与 XMl 相关的特性。例如,代码中使用到的 WhitespaceHandling 属性告诉应用程序不要为 XML 文件中多余的空格建立节点。

下面的代码使用 XmlTextReader 对象的 DocumentElement 属性来查找 XML 文档的树状表达形式的根节点。之后,递归地调用 AddWithChildren 方法 将将节点及它的子节点一同添加到 listbox 中。

下面的代码还包含了属性的处理。属性节点并不包含在一个 XmlDocument 对象的节点的子节点集合中。因而,你只能使用 XmlNode 对象的 Attributes 属性获得属性节点集合。获取了属性节点集合后,代码使用 XmlNamedNodeMap 对象来保存这个集合。这个对象能够保存任何类型的 XmlNode 对象的任何集合。

** 代码列表 ** ** **

private void btnLoad_Click(object sender, System.EventArgs e)

{

XmlTextReader reader = new XmlTextReader(

Server.MapPath("mycompany.xml"));

reader.WhitespaceHandling = WhitespaceHandling.None;

XmlDocument xmlDoc = new XmlDocument();

// 将文件加载到 XmlDocument 对象中

xmlDoc.Load(reader);

// 关闭连接

reader.Close();

// 向 listbox 中添加代表文档的元素

lbNodes.Items.Add("XML Document");

// 查找根节点 , 并将它及它的子节点一同添加到 listbox 中

XmlNode xnod = xmlDoc.DocumentElement;

AddWithChildren(xnod,1);

}

private void AddWithChildren(XmlNode xnod, Int32 intLevel)

{

// 将节点及它的子节点一同添加到 listbox 中

//intLevel 控制缩进的深度

XmlNode xnodWorking;

String strIndent = new string(' ',2 * intLevel);

// 如果节点有值,读取它的值

string strValue = (string) xnod.Value;

if(strValue != null)

{

strValue = " : " + strValue;

}

// 将节点的详细信息添加到 ListBox 中

lbNodes.Items.Add(strIndent + xnod.Name + strValue);

// 如果是元素节点,获取它的属性

if (xnod.NodeType == XmlNodeType.Element)

{

XmlNamedNodeMap mapAttributes = xnod.Attributes;

// 将节点属性添加到 ListBox 中

foreach(XmlNode xnodAttribute in mapAttributes)

{

lbNodes.Items.Add(strIndent + " " + xnodAttribute.Name +

" : " + xnodAttribute.Value);

}

// 如果还有子节点,就递归地调用这个程序

if(xnod.HasChildNodes)

{

xnodWorking = xnod.FirstChild;

while (xnodWorking != null)

{

AddWithChildren(xnodWorking, intLevel +1);

xnodWorking = xnodWorking.NextSibling;

}

}

}

}

}


Published At
Categories with Web编程
Tagged with
comments powered by Disqus