使用XmlTextReader 读取XML

348 篇文章 0 订阅
9 篇文章 0 订阅
使用XmlTextReader 读取XML
1403人阅读 评论(0) 收藏 举报
本文章已收录于:
XmlTextReader 限于只向前的读取
XmlTextReader 的技术类似于读取其他任何文件 首先打开文件,然后从文件中读取信息,最后关闭文件.
每次从文件中读取信息时,他在文件中的位置都会前移.到达文件结尾的时候就什么都不读了。
1 创建XmlTextReader对象
    XmlTextReader 类:表示提供对 XML 数据进行快速、非缓存、只进访问的读取器。
    public class XmlTextReader : XmlReader, IXmlLineInfo
 例如:创建一个名为myReader的对象,并将他指向一个filename文件.这个文件名可以包含完整的路径
 XmlTextReader myReader=new XmlTextReader("filename");
 XmlTextReader 构造函数:1 protected XmlTextReader();   2 public XmlTextReader(Stream);
                        3 public XmlTextReader(string);等等
 读取数据:
 注意:XmlTextReader 对象不验证数据。它假设你已经使用了标准的XML。(缺乏数据验证有助于获取最快的速度)
 读取数据的XMLTextReader方法
 方法                                    详细说明
 Read                                    读取XML文件的下一个结点
 ReadAttributeValue                      读取属性值
 ReadBase64                              读取Base64值
 ReadBinHex                              读取BinHex值
 ReadChars                               读取文本字符
 ReadElementString                       读取只有文本的元素
 ReadEndElement                          读取结束元素
 ReadInnerXml                            将XML结点全部内容读到一个字符串里面
 ReadOuterXml                            将整个XML结点和它的内容读到一个字符串里面
 ReadStartElement                        读取开始元素
 ReadString                              将一个元素或者文本结点值读到一个字符串里面
 注意XmlNodeType对象读取的值与一个XmlNodeType的值相比较完成评估 (详见 msdn)
 关闭XmlTextReader对象 myReader.Close();
 使用XmlTextReader的实例应用程序
 实例说明:

 使用XmlTextReader读取XML文件

  1. using System;  
  2. using System.Drawing;  
  3. using System.Collections;  
  4. using System.ComponentModel;  
  5. using System.Windows.Forms;  
  6. using System.Data;  
  7. using System.Xml;  
  8. using System.Text;  
  9. //  
  10. namespace Xmlapp2  
  11. public class Form1 : System.Windows.Forms.Form  
  12.     {  
  13. //  
  14.   private XmlTextReader  xtr=null;  
  15.     public Form1()  
  16.         {  
  17.             //  
  18.             // Windows 窗体设计器支持所必需的  
  19.             //  
  20.             InitializeComponent();  
  21.             xtr=new XmlTextReader(@"temp.xml");  
  22.             //XmlTextReader.WhitespaceHandling 属性 :获取或设置一个值,该值指定如何处理空白  
  23.             xtr.WhitespaceHandling=WhitespaceHandling.All;  
  24.             //  
  25.             // TODO: 在 InitializeComponent 调用后添加任何构造函数代码  
  26.             //  
  27.         }  
  28. //  
  29.         private void button2_Click(object sender, System.EventArgs e)//关闭退出  
  30.         {  
  31.             if (xtr!=null)  
  32.             {  
  33.                 xtr.Close();  
  34.             }  
  35.             Application.Exit();  
  36.         }  
  37.         private void button1_Click(object sender, System.EventArgs e)  
  38.         {  
  39.             StringBuilder str=new StringBuilder("Formatted:");  
  40.             if (xtr.Read()==true)  
  41.             {  
  42.                 label1.Text=xtr.NodeType.ToString();  
  43.                 label2.Text=xtr.Name.ToString();  
  44.                 label3.Text=xtr.Value.ToString();  
  45.                   
  46.                 switch (xtr.NodeType)  
  47.                 {  
  48.                     case XmlNodeType.Element:  
  49.                         str.AppendFormat("<{0}>",xtr.Name);  
  50.                         break;  
  51.                     case XmlNodeType.Text:  
  52.                         break;  
  53.                     case XmlNodeType.CDATA:  
  54.                         str.AppendFormat("<![CDATA[{0}]]>",xtr.Value);  
  55.                         break;  
  56.                     case XmlNodeType.ProcessingInstruction:  
  57.                         str.AppendFormat("<?{0} {1}?>",xtr.Name,xtr.Value);  
  58.                         break;  
  59.                     case XmlNodeType.Comment:  
  60.                         str.AppendFormat("<!--{0}-->",xtr.Value);  
  61.                         break;  
  62.                     case XmlNodeType.XmlDeclaration:  
  63.                         str.AppendFormat("<?xml version='1.0'?>");  
  64.                         break;  
  65.                     case XmlNodeType.DocumentType:  
  66.                         str.AppendFormat("<!DOCTYPE{0} [{1}]>",xtr.Name,xtr.Value);  
  67.                         break;  
  68.                     case XmlNodeType.EntityReference:  
  69.                         str.Append(xtr.Name);  
  70.                         break;  
  71.                     case XmlNodeType.EndElement:  
  72.                         str.AppendFormat("</{0}>",xtr.Name);  
  73.                         break;  
  74.                     case XmlNodeType.Whitespace:  
  75.                         //Console.Write("{0}",xtr.Value);  
  76.                         break;  
  77.                 }  
  78.                 label4.Text=str.ToString();  
  79.   
  80.             }  
  81.             else  
  82.             {  
  83.                 label1.Text="Eof";  
  84.                 label2.Text="Eof";  
  85.                 label3.Text="Eof";  
  86.             }  
  87.         }  
  88.   
  89. }  
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Xml;
using System.Text;
//
namespace Xmlapp2
public class Form1 : System.Windows.Forms.Form
    {
//
  private XmlTextReader  xtr=null;
    public Form1()
        {
            //
            // Windows 窗体设计器支持所必需的
            //
            InitializeComponent();
            xtr=new XmlTextReader(@"temp.xml");
            //XmlTextReader.WhitespaceHandling 属性 :获取或设置一个值,该值指定如何处理空白
            xtr.WhitespaceHandling=WhitespaceHandling.All;
            //
            // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
            //
        }
//
        private void button2_Click(object sender, System.EventArgs e)//关闭退出
        {
            if (xtr!=null)
            {
                xtr.Close();
            }
            Application.Exit();
        }
        private void button1_Click(object sender, System.EventArgs e)
        {
            StringBuilder str=new StringBuilder("Formatted:");
            if (xtr.Read()==true)
            {
                label1.Text=xtr.NodeType.ToString();
                label2.Text=xtr.Name.ToString();
                label3.Text=xtr.Value.ToString();
                
                switch (xtr.NodeType)
                {
                    case XmlNodeType.Element:
                        str.AppendFormat("<{0}>",xtr.Name);
                        break;
                    case XmlNodeType.Text:
                        break;
                    case XmlNodeType.CDATA:
                        str.AppendFormat("<![CDATA[{0}]]>",xtr.Value);
                        break;
                    case XmlNodeType.ProcessingInstruction:
                        str.AppendFormat("<?{0} {1}?>",xtr.Name,xtr.Value);
                        break;
                    case XmlNodeType.Comment:
                        str.AppendFormat("<!--{0}-->",xtr.Value);
                        break;
                    case XmlNodeType.XmlDeclaration:
                        str.AppendFormat("<?xml version='1.0'?>");
                        break;
                    case XmlNodeType.DocumentType:
                        str.AppendFormat("<!DOCTYPE{0} [{1}]>",xtr.Name,xtr.Value);
                        break;
                    case XmlNodeType.EntityReference:
                        str.Append(xtr.Name);
                        break;
                    case XmlNodeType.EndElement:
                        str.AppendFormat("</{0}>",xtr.Name);
                        break;
                    case XmlNodeType.Whitespace:
                        //Console.Write("{0}",xtr.Value);
                        break;
                }
                label4.Text=str.ToString();

            }
            else
            {
                label1.Text="Eof";
                label2.Text="Eof";
                label3.Text="Eof";
            }
        }

}


0
0
 
 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值