XML参考 :XmlReader 详解、实例
XML参考 :XmlReader 详解、实例-- 详解
转:http://www.cnblogs.com/Dlonghow/archive/2008/07/28/1252191.html
XML参考 :XmlReader 详解、实例(1)-- 详解
.NET Framework 类库
XmlReader 类
表示提供对 XML 数据进行快速、非缓存、只进访问的读取器,即 对 XML 数据流的只进只读访问。XmlReader 类符合 W3C 可扩展标记语言 (XML) 1.0 和“XML 中的命名空间”建议。
XmlReader 在发生 XML 分析错误时引发 XmlException。引发异常后,读取器的状态不可预知。例如,报告的节点类型可能不同于当前节点的实际节点类型。使用 ReadState 属性可以检查读取器是否处于错误状态。
一、使用XmlReader类的步骤如下
(1) 使用XmlReader类的Create()创建该类的一个实例,并将被读取的XML文件名称作为参数传入方法
(2) 建立一个反复调用的Read()方法的循环。这个方法从文件的第一个节点开始,然后读取所有余下的节点,但每次调用只读取一个节点,如果存在一个节点可被读取 则返回True,当到达文件最后时返回False.
(3) 在这个循环中将检查XmlReader对象的属性和方法,以获得当前节点的信息(类型、名称、数据等等),不断地执行该循环知道Read()返回False.
(一)开始读取文档
要开始读取xml文档,你可以调用任意一个Read()方法,XmlReader 、XmlTextReader、XmlNodeReader 和 XmlValidatingReader 如:
XmlReader reader = XmlReader.Create("Employees.xml");
reader.ReadStartElement();或者reader.MoveToContent()直接跳至文档内容。如果当前节点不是内容节点(内容节点是CDATA, Element,Entity,EntityReference).如果位于属性上,将会返回至包含该属性的元素。
【重要事项】:
虽然 Microsoft .NET Framework 包含 XmlReader 类的具体实现,如 XmlTextReader、XmlNodeReader 和 XmlValidatingReader 类,但是在 2.0 版本中,建议的做法是使用 Create 方法创建 XmlReader 实例。
(二)读取元素
(1)Read(), ReadString(),ReadStartElement(),ReadEndElement()都能读取Element节点。
(2)每个方法都调到文档的下一个节点。
(3)MovetoElement()只移动到下一个节点而不读取它。
当XmlReader读取文档时,它的状态有可能如下:
成员名称 说明 Closed 已调用 Close 方法。 EndOfFile 已成功到达文件结尾。 Error 出现错误,阻止读取操作继续进行。 Initial 未调用 Read 方法。 Interactive 已调用 Read 方法。可能对读取器调用了其他方法。 (三)读取属性应当先用HasAttributes检查是否有属性,然后可以通过MoveToAttribute(), MoveToFirstAttribute(),MoveToNextAttribute()来访问XmlReader reader = XmlReader.Create("Employees.xml");
if (reader.HasAttributes)
{
reader.MoveToAttribute("id");
}(四)读取内容和其他数据
ReadString()读取当前节点内容为字符串,还可以使用ReadElementContentAsXXX(),ReadContentAsXXX可以在当前位置读取文本内容。
该方法返回元素的内容、文本、空白、重要空白或 CDATA 节点。
如果定位在元素上,ReadString 将所有文本、重要的空白、空白和 CDATA 节节点串联在一起,然后将串联在一起的数据作为元素内容返回。当遇到任何标记(包括注释和处理指令)时,它就会停止。这可以在混合内容模型中发生,也可以在读取元素结束标记时发生。
如果定位在元素文本节点上,则 ReadString 执行相同的串联,即从该文本节点到元素结束标记。如果读取器定位在属性文本节点上,则 ReadString 与读取器定位在元素开始标记上时的功能相同。它返回所有串联在一起的元素文本节点。
如果定位在属性上,则 ReadString 将返回空字符串,并将读取器移回到拥有该属性的元素。
如果在任何其他节点类型上调用 ReadString,则它将返回空的字符串并将读取器定位在下一个节点上。
转:http://www.cnblogs.com/Dlonghow/archive/2008/07/28/1254261.html
XML参考 :XmlReader 详解、实例(2)-- 读取XML节点
.NET Framework 类库
XmlReader 类
表示提供对 XML 数据进行快速、非缓存、只进访问的读取器,即 对 XML 数据流的只进只读访问。XmlReader 类符合 W3C 可扩展标记语言 (XML) 1.0 和“XML 中的命名空间”建议。
二.实例,读取XML节点
1. 我们先创建一个Employees.xml的文件
<?xml version="1.0" encoding="utf-8" ?>
<employees>
<employee id="1">
<name>
<firstName>Jack</firstName>
<lastName>Wang</lastName>
</name>
<city>BeiJing</city>
<state>BeiJing</state>
<zipCode>100061</zipCode>
</employee>
<employee id="2">
<name>
<firstName>DeHua</firstName>
<lastName>Liu</lastName>
</name>
<city>Hongkong</city>
<state>China</state>
<zipCode>000061</zipCode>
</employee>
</employees>2.读取元素的代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml; namespace JackDong.XmlReaderDemo
{
class XmlReaderDemo
{
private static string xmlFilePath = @"..\..\EmployeeInfo.xml";// @"D:\\EmployeeInfo.xml" public static string ReadXml()
{
string result = ""; try
{
using (XmlReader reader = XmlReader.Create(xmlFilePath))
{
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
for (int count = 0; count < reader.Depth; count++)
{
result += "---";
}
result += "->" + reader.Name + "\n";
}
}
}
}
catch (Exception ex){
result += "An Exception occured: " + ex.Message;
}
return result;
}
} class Program
{
static void Main()
{
string strReturn = XmlReaderDemo.ReadXml();
Console.WriteLine(strReturn);
Console.ReadLine();
}
}
}3.执行效果如下:
转:http://www.cnblogs.com/Dlonghow/archive/2008/07/28/1254290.html
XML参考 :XmlReader 详解、实例(3)-- 读取XML节点和属性名称
.NET Framework 类库
XmlReader 类
表示提供对 XML 数据进行快速、非缓存、只进访问的读取器,即 对 XML 数据流的只进只读访问。XmlReader 类符合 W3C 可扩展标记语言 (XML) 1.0 和“XML 中的命名空间”建议。
三.读取XML节点和属性名称
class XmlReaderDemo
{
private static string xmlFilePath = @"..\..\EmployeeInfo.xml";// @"D:\\EmployeeInfo.xml" public static string ReadXml()
{
string result = "";
try
{
using (XmlReader reader = XmlReader.Create(xmlFilePath))
{
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
for (int count = 0; count < reader.Depth; count++)
{
result += "";
}
result += "->" + reader.Name;
if (reader.HasAttributes)
{
result += "(";
for (int count = 0; count < reader.AttributeCount; count++)
{
reader.MoveToAttribute(count);
result += reader.Name + ",";
}
result += ")";
}
result += "\n";
}
}
}
}
catch (Exception ex)
{
result += "An Exception occured: " + ex.Message;
}
return result;
}
} class Program
{
static void Main()
{
string strReturn = XmlReaderDemo.ReadXml();
Console.WriteLine(strReturn);
Console.ReadLine();
}
}效果图如下所示:
XML参考 :XmlReader 详解、实例(4)-- 读取XML内容
.NET Framework 类库
XmlReader 类
表示提供对 XML 数据进行快速、非缓存、只进访问的读取器,即 对 XML 数据流的只进只读访问。XmlReader 类符合 W3C 可扩展标记语言 (XML) 1.0 和“XML 中的命名空间”建议。
1.实例:读取XML内容
page页面代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %> <!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 runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div style="width:400px; border:solid 1px #000; color:White;">
<asp:Label ID="mEmployeesLabel" runat="server" Text=""></asp:Label>
</div>
</form>
</body>
</html>2.读取XML内容的代码
protected void Page_Load(object sender, EventArgs e)
{
string employeeID = "";
string xmlFilePath = Request.PhysicalApplicationPath + @"\Employees.xml";
try
{
using (XmlReader reader = XmlReader.Create(xmlFilePath))
{
this.mEmployeesLabel.Text = "<b>Employees</b>";
this.mEmployeesLabel.Text += "<ul>"; while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
if (reader.Name == "employee")
{
employeeID = reader.GetAttribute("id");
}
if (reader.Name == "name")
{
this.mEmployeesLabel.Text += "<li>" + "Employee-" + employeeID;
this.mEmployeesLabel.Text += "<ul>";
this.mEmployeesLabel.Text += "<li>ID-" + employeeID + "</li>";
}
if (reader.Name == "firstName")
{
this.mEmployeesLabel.Text += "<li>First Name-" + reader.ReadString() + "</li>";
}
if (reader.Name == "lastName")
{
this.mEmployeesLabel.Text += "<li>Last Name-" + reader.ReadString() + "</li>";
}
if (reader.Name == "city")
{
this.mEmployeesLabel.Text += "<li>City-" + reader.ReadString() + "</li>";
}
if (reader.Name == "state")
{
this.mEmployeesLabel.Text += "<li>state-" + reader.ReadString() + "</li>";
}
if (reader.Name == "zipCode")
{
this.mEmployeesLabel.Text += "<li>state-" + reader.ReadElementContentAsInt() + "</li>";
}
}
else if (reader.NodeType == XmlNodeType.EndElement)
{
if (reader.Name == "employee")
{
this.mEmployeesLabel.Text += "</ul>";
this.mEmployeesLabel.Text += "</li>";
}
}
}
this.mEmployeesLabel.Text += "</ul>";
}
}
catch (Exception ex)
{
this.mEmployeesLabel.Text = "An Exception occured:" + ex.Message;
}
}3.效果如下:
XML参考 :XmlReader 详解、实例的更多相关文章
- 史上最全的maven pom.xml文件教程详解
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- Message,MessageQueue,Looper,Handler详解+实例
Message,MessageQueue,Looper,Handler详解+实例 原文地址 Android的Handler使用(这篇简单介绍Handler的使用) 一.几个关键概念 1.Message ...
- gvoory脚本中关于HttpClient使用详解实例
一.gvoory脚本中关于HttpClient使用详解实例 HttpClient:是一个接口 首先需要先创建一个DefaultHttpClient的实例 HttpClient httpClient=n ...
- Rxjava2 介绍与详解实例
目录 前言 RX介绍 Rx模式 Rx使用依赖: Rxjava的入门基础 1. Observable 2. Flowable 3. Single 4. Completable 5. Maybe 6. S ...
- crossdomain.xml的配置详解
目录 1 简介 2 crossdomain.xml的配置详解 3 总结 1 简介 flash在跨域时唯一的限制策略就是crossdomain.xml文件,该文件限制了flash是否可以跨域读写数据以及 ...
- logback logback.xml常用配置详解(三)
logback logback.xml常用配置详解 <filter> <filter>: 过滤器,执行一个过滤器会有返回个枚举值,即DENY,NEUTRAL,ACCEPT其中之 ...
- iOS开发——UI篇OC篇&UICollectionView详解+实例
UICollectionView详解+实例 实现步骤: 一.新建两个类 1.继承自UIScrollView的子类,比如HMWaterflowView * 瀑布流显示控件,用来显示所有的瀑布流数据 2. ...
- Android:weight,margin,padding详解实例
weight详解 weight是用来等比例划分区域的属性. 案例代码 <LinearLayout xmlns:android="http://schemas.android.com/a ...
- logback logback.xml常用配置详解(一)<configuration> and <logger>
logback logback.xml常用配置详解(一)<configuration> and <logger> 博客分类: Log java loglogback 原创文章 ...
随机推荐
- Linux 下编译自己的 OpenJDK7 包括JVM和JDK API
1.首先去 这里 http://download.java.net/openjdk/jdk7/ 下载OpenJDK7的源码zip包 2. 简要介绍下OpenJDK7中的目录 hotspot: 放有Op ...
- hdu 4278 2012天津赛区网络赛 数学 *
8进制转为10进制 #include<cstdio> #include<iostream> #include<algorithm> #include<cstr ...
- Linux文本比较-diff&awk
最近为了完成工作,需要将两个文件A.old和A进行比较,然后将A中新增加的部分保存到A中,其他部分删除.经过查找相关资料,发现有两种比较好的方法. 1. 使用diff命令 diff old.file ...
- 如何解决虚拟机Mac OS X 不支持二进制编译问题()
本文将着重解决在使用VMware 11安装Mac OS虚拟机出现”Mac OS X 不支持二进制编译.若要运行 Mac OS X 主机上需要一个 VMware Workstation 支持英特尔 VT ...
- 在Salesforce中创建Schedule的Job去定时触发对应的Class
在Salesforce中也存在着Job的概念,当然了我们可以创建Schedule的Job去定时触发对应的Class,来完成我们所需要定时处理的功能,比如:定时同步数据. 具体处理步骤如下所示: 1): ...
- cocos2dx游戏开发——别踩白块学习笔记(一)——Block类
一.Block类介绍 当然啦,Block类在这个游戏里就是必需品= =,因为整体都是由这个搞出来的,所以我们可以把游戏需要实现的功能都放在这里. 主要有下面这些功能(经典模式): 1.创建一个Bloc ...
- ERROR Shell: Failed to locate the winutils binary in the hadoop binary path
文章发自:http://www.cnblogs.com/hark0623/p/4170172.html 转发请注明 14/12/17 19:18:53 ERROR Shell: Failed to ...
- 使用JdbcTemplate报 Incorrect column count: expected 1, actual 5错误解决
Incorrect column count: expected 1, actual 5 在使用jdbc的querForObject queryForList的时候,出现Incorrect colum ...
- json 入门(1)
1.JSONObject介绍 JSONObject-lib包是一个beans,collections,maps,Java arrays和xml和JSON互相转换的包. 2.下载jar包 http:// ...
- 【JavaScript】变量定义提升、this指针指向、运算符优先级、原型、继承、全局变量污染、对象属性及原型属性优先级
参考资料http://caibaojian.com/toutiao/5446 1.所有变量声明(var)或者声明函数都会被提升到当前函数顶部 关于函数表达式,js会将代码拆分为两行代码分别执行.这里需 ...
.jpg)
.jpg)
.jpg)