使用.NET讀取XML文件 選擇自 lotusswan 的 Blog

 

介紹<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

       本文中我將介紹在ASP.NET應用程序中如何讀取XML文件,這是一個十分有用的技巧。使用這個技巧,我們能夠定製我們的應用程序的配置文件,也可以讀取那些保存在XML文件中的數據。

概論

       下面的代碼將使用XmlTextReader對象將磁盤文件中的數據讀取到XmlDocument對象中。XmlTextReader對象在功能上和StreamReaderBinaryReader對象十分相似,只不過它是專爲讀取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;

          }

        }

      }

    }

  }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章