使用.NET读取XML文件

作者:网络 来源:佚名 更新时间:2008-07-07 16:10:40 点击:
介绍

    本文中我将介绍在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;

     }

    }

   }

  }

 }