使用XmlReader讀取xml文件

在.net開發中經常需要讀寫xml形式的文件(app.config和web.config分別是WinForm和WebForm中使用到的 xml文件的一個特列,並且微軟提供了通用的方法), .net類庫提供了多種讀寫xml文件的方式,每一種方式都有其優點和缺點,因而 有其實用性。

下面列出微軟.net類庫提供的讀寫xml文件個類及其特點:

類名稱 優點 缺點
XmlReader 快速、高效、可擴展 只讀,只向前,需要人工驗證
XmlDocument 可往返、可讀寫、支持XPath篩選 比XmlReader慢
XPathNavigator 可往返,支持XPath和XSLT 只讀
XPathDocument 比XmlDocument,優化支持XPath和XSLT 比XmlReader慢

本文提到的XmlReader也是微軟類庫中的一個類,它的特點是快速高效,並且可擴展,缺點是隻讀。

下面舉例說明XmlReader的用法:
(一)用到的xml文件:meu.xml

<? xml version="1.0" encoding="utf-8"  ?>
< Menus >
  
< Menu  title ="常用網址" >
    
< item  name ="天下網"  url ="http://www.netskycn.com"  id ="1" />
    
< item  name ="天下網生活論壇"  url ="http://life.netskycn.com"  id ="2" />
    
< item  name ="csdn"  url ="http://www.csdn.net"  id ="3" />
    
< item  name ="我的博客"  url ="http://blog.csdn.net/zhoufoxcn"  id ="4" />
    
< item  name ="百度"  url ="http://www.baidu.com"  id ="5" />
    
< item  name ="Google"  url ="http://www.google.cn"  id ="6" />
    
< item  name ="微軟"  url ="http://www.microsoft.com"  id ="7" />
  
</ Menu >
  
< Menu  title ="娛樂網址" >
    
< item  name ="奇虎"  url ="http://www.qihoo.com"  id ="12" />
    
< item  name ="網易"  url ="http://www.163.com"  id ="13" />
    
< item  name ="天涯"  url ="http://www.tianya.cn"  id ="14" />
  
</ Menu >
  
< Menu  title ="安全網址" >
    
< item  name ="360"  url ="http://www.safe360.com"  id ="15" />
    
< item  name ="瑞星"  url ="http://www.rising.com.cn"  id ="16" />   
  
</ Menu >
</ Menus >

(二)讀取並顯示:ReadXml.aspx

<% @ Page Language = " C# "  ContentType = " text/html "  ResponseEncoding = " gb2312 "   %>
<% @ Import Namespace = " System.Xml "   %>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head >
< meta  http-equiv ="Content-Type"  content ="text/html; charset=gb2312"   />
< title > XMLReader實例 </ title >
</ head >
< body >
< script  runat ="server" >
protected 
void  Page_Load(Object Src, EventArgs E)
{
  
if  ( ! IsPostBack) 
  {
      XmlReader xmlReader 
=  XmlReader.Create(Server.MapPath( " Menu.xml " ));
            
while  (xmlReader.Read())
            {
                Response.Write(
" <li>節點類型: "   +  xmlReader.NodeType  +   " ==<br> " );
                
switch  (xmlReader.NodeType)
                {
                    
case  XmlNodeType.XmlDeclaration:
                        
for  ( int  i  =   0 ; i  <  xmlReader.AttributeCount; i ++ )
                        {
                            xmlReader.MoveToAttribute(i);
                            Response.Write(
" 屬性: "   +  xmlReader.Name  +   " = "   +  xmlReader.Value + " &nbsp; " );
                        }
                        
break ;
                    
case  XmlNodeType.Attribute:
                        
for  ( int  i  =   0 ; i  <  xmlReader.AttributeCount; i ++ )
                        {
                            xmlReader.MoveToAttribute(i);
                            Response.Write(
" 屬性: "   +  xmlReader.Name  +   " = "   +  xmlReader.Value + " &nbsp; " );
                        }
                        
break ;
                    
case  XmlNodeType.CDATA:
                        Response.Write(
" CDATA: "   +  xmlReader.Value + " &nbsp; " );
                        
break ;
                    
case  XmlNodeType.Element:
                        Response.Write(
" 節點名稱: "   +  xmlReader.LocalName + " <br> " );
                        
for  ( int  i  =   0 ; i  <  xmlReader.AttributeCount; i ++ )
                        {
                            xmlReader.MoveToAttribute(i);
                            Response.Write(
" 屬性: "   +  xmlReader.Name  +   " = "   +  xmlReader.Value + " &nbsp; " );
                        }
                        
break ;
                    
case  XmlNodeType.Comment:
                        Response.Write(
" Comment: "   +  xmlReader.Value);
                        
break ;
                    
case  XmlNodeType.Whitespace:
                        Response.Write(
" Whitespace: "   +   " &nbsp; " );
                        
break ;
                    
case  XmlNodeType.ProcessingInstruction:
                        Response.Write(
" ProcessingInstruction: "   +  xmlReader.Value);
                        
break ;
                    
case  XmlNodeType.Text:
                        Response.Write(
" Text: "   +  xmlReader.Value);
                        
break ;
                }
            }
            xmlReader.Close();
  }
}
</ script >
</ body >
</ html >

特別說明的是:menu.xml和ReadXml.aspx文件放在同一個文件夾下,如果實際情況與此不符,請根據實際情況更改。

以下是輸出結果:

 

節點類型:XmlDeclaration==
屬性:version=1.0 屬性:encoding=utf-8  節點類型:Whitespace==
Whitespace:  節點類型:Element==
節點名稱:Menus 節點類型:Whitespace==
Whitespace:  節點類型:Element==
節點名稱:Menu
屬性:title=常用網址  節點類型:Whitespace==
Whitespace:  節點類型:Element==
節點名稱:item
屬性:name=天下網 屬性:url=http://www.netskycn.com 屬性:id=1  節點類型:Whitespace==
Whitespace:  節點類型:Element==
節點名稱:item
屬性:name=天下網生活論壇 屬性:url=http://life.netskycn.com 屬性:id=2  節點類型:Whitespace==
Whitespace:  節點類型:Element==
節點名稱:item
屬性:name=csdn 屬性:url=http://www.csdn.net 屬性:id=3  節點類型:Whitespace==
Whitespace:  節點類型:Element==
節點名稱:item
屬性:name=我的博客 屬性:url=http://blog.csdn.net/zhoufoxcn 屬性:id=4  節點類型:Whitespace==
Whitespace:  節點類型:Element==
節點名稱:item
屬性:name=百度 屬性:url=http://www.baidu.com 屬性:id=5  節點類型:Whitespace==
Whitespace:  節點類型:Element==
節點名稱:item
屬性:name=Google 屬性:url=http://www.google.cn 屬性:id=6  節點類型:Whitespace==
Whitespace:  節點類型:Element==
節點名稱:item
屬性:name=微軟 屬性:url=http://www.microsoft.com 屬性:id=7  節點類型:Whitespace==
Whitespace:  節點類型:EndElement== 節點類型:Whitespace==
Whitespace:  節點類型:Element==
節點名稱:Menu
屬性:title=娛樂網址  節點類型:Whitespace==
Whitespace:  節點類型:Element==
節點名稱:item
屬性:name=奇虎 屬性:url=http://www.qihoo.com 屬性:id=12  節點類型:Whitespace==
Whitespace:  節點類型:Element==
節點名稱:item
屬性:name=網易 屬性:url=http://www.163.com 屬性:id=13  節點類型:Whitespace==
Whitespace:  節點類型:Element==
節點名稱:item
屬性:name=天涯 屬性:url=http://www.tianya.cn 屬性:id=14  節點類型:Whitespace==
Whitespace:  節點類型:EndElement== 節點類型:Whitespace==
Whitespace:  節點類型:Element==
節點名稱:Menu
屬性:title=安全網址  節點類型:Whitespace==
Whitespace:  節點類型:Element==
節點名稱:item
屬性:name=360 屬性:url=http://www.safe360.com 屬性:id=15  節點類型:Whitespace==
Whitespace:  節點類型:Element==
節點名稱:item
屬性:name=瑞星 屬性:url=http://www.rising.com.cn 屬性:id=16  節點類型:Whitespace==
Whitespace:  節點類型:EndElement== 節點類型:Whitespace==
Whitespace:  節點類型:EndElement==

 

xml內容:
<?xml version="1.0" encoding="utf-8" ?>
<google>
  <googleColorBorder>f6fbff</googleColorBorder>
  <googleColorBG>f6fbff</googleColorBG>
  <googleColorLink>666666</googleColorLink>
  <googleColorText>046b7A</googleColorText>
  <googleColorUrl>008000</googleColorUrl>
</google>

cs代碼:
 protected void Page_Load(object sender, EventArgs e)
    {
        XmlTextReader xtr = new XmlTextReader("c://AdColor2.xml");
        while (xtr.Read()) {
            if (xtr.NodeType == XmlNodeType.Element && xtr.LocalName == "googleColorBorder") {
                Response.Write(xtr.ReadString() + "<br/>");
            }

            if (xtr.NodeType == XmlNodeType.Element && xtr.LocalName == "googleColorBG")
            {
                Response.Write(xtr.ReadString() + "<br/>");
            }

            if (xtr.NodeType == XmlNodeType.Element && xtr.LocalName == "googleColorLink")
            {
                Response.Write(xtr.ReadString() + "<br/>");
            }

            if (xtr.NodeType == XmlNodeType.Element && xtr.LocalName == "googleColorText")
            {
                Response.Write(xtr.ReadString() + "<br/>");
            }

            if (xtr.NodeType == XmlNodeType.Element && xtr.LocalName == "googleColorUrl")
            {
                Response.Write(xtr.ReadString() + "<br/>");
            }

        }
    }

 

 

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