Howard Gu

"你真的认为写软件的人会故意去弄个很烂的用户界面?"

导航

XML学习笔记(一) --- 使用XmlReader读取分析Xml源

        XmlReader Class 一个读取Xml文件、流文件和URLs的抽象基类,它是Non-cached、forward-only和read-only access的。
        XmlTextRead、XmlNodeReader和XmlValidatingReader是它的三种实现。通过使用XmlReader,可以仅仅取出感兴趣的节点(使用的Pull模型);当Xml文件存在错误时,也能继续进行处理。

打开Xml源的一种方法
using System.IO;
using System.Xml;



this.strXmlFileName = @"e:\data\books.xml";
if(File.Exists(this.strXmlFileName))
{
XmlTextReader xtrBooks 
= new XmlTextReader(this.strXmlFileName);
}


打开Xml文件后,可以使用Read方法标识XmlReader是否已经达到了Xml源的最后。每调用一次Read方法,XmlTextReader所表示的Xml源中的当前节点就Foward-only一次。在对节点操作前,首先可以通过NodeType属性明确节点的类型。一般而言,节点类型有:XmlComment、XmlElement和XmlText。比如说,对于下面这个Xml元素而言,
<city>Peking</city>
XmlTextReader把它看作为3个节点。
1.<city>被看作XmlNodeType.Element节点,元素的名称,"city",作为XmlTextReader的Name属性。
2.字符串"Peking"被看作XmlNodeType.Text节点,字符串的值作为XmlTextReader的Value属性。
3.</city>被看作XmlNodeType。EndElement节点。

if (reader.NodeType==XmlNodeType.EntityReference)
        Console.WriteLine(
"{0} {1}", reader.NodeType, reader.Name);
else
        Console.WriteLine(
"{0} {1}", reader.NodeType, reader.Value);
这种方式可以把Type分为两类,在某些情况下很有用



完整代码的例子:

using System;
using System.IO;
using System.Xml;
using System.Text;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace XmlPractice
{
    
/// <summary>
    
/// Summary description for WebForm1.
    
/// </summary>

    public class WebForm1 : System.Web.UI.Page
    
{
        
protected System.Web.UI.WebControls.Label lbDisplay;
        
protected string strXmlFileName;
    
        
private void Page_Load(object sender, System.EventArgs e)
        
{            
            
// Put user code to initialize the page here
            if(!Page.IsPostBack)
            
{
                
this.strXmlFileName = @"e:\data\books.xml";

                StringBuilder sb 
= new StringBuilder(); 
    
                
if(File.Exists(this.strXmlFileName))
                
{
                    XmlTextReader xtrBooks 
= new XmlTextReader(this.strXmlFileName);
                    
                    
while(xtrBooks.Read())
                    
{
                        
switch(xtrBooks.NodeType)
                        
{
                            
case XmlNodeType.Comment:
                                
break;
                            
case XmlNodeType.Element:
                                sb.Append(
"Element:");
                                sb.Append(xtrBooks.Name);
                                sb.Append(
"<br>");
                                
break;
                            
case XmlNodeType.Text:
                                sb.Append(
"Text:");
                                sb.Append(xtrBooks.Value);
                                sb.Append(
"<br>");
                                
break;
                            
default:
                                
break;
                        }


                    }

                    lbDisplay.Text 
= sb.ToString();
                }

                
else
                    lbDisplay.Text 
= "文件不存在";
            }

        }


        
Web Form Designer generated code
    }

}


明天学习采用DOM方式,即通过XmlNodeReader开始。

posted on 2004-07-20 16:05  Howard  阅读(1466)  评论(0)    收藏  举报