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);
}
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开始。
XmlTextRead、XmlNodeReader和XmlValidatingReader是它的三种实现。通过使用XmlReader,可以仅仅取出感兴趣的节点(使用的Pull模型);当Xml文件存在错误时,也能继续进行处理。
打开Xml源的一种方法
打开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节点。
完整代码的例子:
明天学习采用DOM方式,即通过XmlNodeReader开始。
浙公网安备 33010602011771号