• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

EdithZone .NET Blog

O,My God!
  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

使用.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; 
 
          }
 
 
        }
 
 
      }
 
 
    }
 
 
  }

posted on 2004-12-27 13:14  Hotdog  阅读(282)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3