C# XmlReader
来源:互联网 发布:杭州数据分析企业 编辑:程序博客网 时间:2024/06/06 06:15
XmlReader在xml文档上提供一种拉样式的API。在.Net Framework中是独一无二的。它可以对xml进行快速的、只向前的只读访问。XmlReader是一个抽象类,其他类派生自它,以提供特定实例,例如XmlTextReader和XmlNodeReader。int bookcount = 0;
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;
string booksFile = Server.MapPath("books.xml");
using (XmlReader reader = XmlReader.Create(booksFile, settings))
{
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element &&
"book" == reader.LocalName)
{
bookcount++;
}
}
}
Response.Write(String.Format("Found {0} books!", bookcount));
Reader.LocalName包含节点的非命名空间限定名。Reader.Name属性于它不同包含几点的完全限定名(命名空间)。
System.Xml.Linq命名空间引入了一个新类XDocument,它比XmlDocument友好的多,但仍允许XmlReader和XmlWriter交互操作。
XDocument booksXML = XDocument.Load(Server.MapPath("books.xml"));
var books = from book in booksXML.Descendants("{http://example.books.com}book")
select book.Element("{http://example.books.com}title").Value;
Response.Write(String.Format("Found {0} books!", books.Count()));
在验证xml时验证器适用xml实例文档中的schemaLocation提示。如果xml实例文档没有包含查找xml模式的足够信息,实例文档就需要XmlReaderSettings对象上的XmlSchemaSet对象。注意XmlValidatingReader类现在已过时,因为所有的读取器创建都使用XmlReadereate方法进行。
protected void Page_Load(object sender, EventArgs e)
{
int bookcount = 0;
XmlReaderSettings settings = new XmlReaderSettings();
string booksSchemaFile = Server.MapPath("books.xsd");
settings.Schemas.Add(null, XmlReader.Create(booksSchemaFile));
settings.ValidationType = ValidationType.Schema;
settings.ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings;
settings.ValidationEventHandler += new ValidationEventHandler(settings_ValidationEventHandler);
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;
string booksFile = Server.MapPath("books.xml");
using (XmlReader reader = XmlReader.Create(booksFile, settings))
{
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element &&
"book" == reader.LocalName)
{
bookcount++;
}
}
}
Response.Write(String.Format("Found {0} books!", bookcount));
}
void settings_ValidationEventHandler(object sender, System.Xml.Schema.ValidationEventArgs e)
{
Response.Write(e.Message);
}
XDocument类有一个扩展方法Validate。它把标准的 System.Xml.Schema.XmlSchema对象作为参数,可以根据xml模式验正XDocumnet。
string booksSchemaFile = Server.MapPath("books.xsd");
string booksFile = Server.MapPath("books.xml");
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add(null, XmlReader.Create(booksSchemaFile));
XDocument booksXML = XDocument.Load(booksFile);
booksXML.Validate(schemas, (senderParam, eParam) =>
{
Response.Write(eParam.Message);
}, true);
XNamespace ns = "http://example.books.com";
var books = from book in booksXML.Descendants(ns + "book")
select book.Element(ns + "title").Value;
Response.Write(String.Format("Found {0} books!", books.Count()));
XmlReader内部适用NameTable,列出在该文档中使用的所有已知元素、属性、命名空间。这个过程称为原子化,其字面意思是xml被分解为各个原子部分。如果把字符串book作为一个对象引用,和其它元素名一起保存在一个表中,就不需要把book在内部结构中存储次。
protected void Page_Load(object sender, EventArgs e)
{
int bookcount = 0;
XmlReaderSettings settings = new XmlReaderSettings();
NameTable nt = new NameTable();
object book = nt.Add("book");
settings.NameTable = nt;
string booksSchemaFile = Path.Combine(Request.PhysicalApplicationPath, "books.xsd");
settings.Schemas.Add(null, XmlReader.Create(booksSchemaFile));
settings.ValidationType = ValidationType.Schema;
settings.ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings;
settings.ValidationEventHandler += new ValidationEventHandler(settings_ValidationEventHandler);
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;
string booksFile = Path.Combine(Request.PhysicalApplicationPath, "books.xml");
using (XmlReader reader = XmlReader.Create(booksFile, settings))
{
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element &&
book.Equals(reader.LocalName)) //A subtle, but significant change!
{
bookcount++;
}
}
}
Response.Write(String.Format("Found {0} books!", bookcount));
void settings_ValidationEventHandler(object sender, System.Xml.Schema.ValidationEventArgs e)
{
Response.Write(e.Message);
}
XmlReader可以适用xml串行化和ReadSubTree提取复杂类型,xml串行化只能串行化对象的公共属性。
[XmlRoot(ElementName = "author", Namespace = "http://example.books.com")]
public class Author
{
[XmlElement(ElementName = "first-name")]
public string FirstName;
[XmlElement(ElementName = "last-name")]
public string LastName;
}
protected void Page_Load(object sender, EventArgs e)
{
//Create factory early
XmlSerializerFactory factory = new XmlSerializerFactory();
XmlReaderSettings settings = new XmlReaderSettings();
NameTable nt = new NameTable();
object book = nt.Add("book");
object price = nt.Add("price");
object author = nt.Add("author");
settings.NameTable = nt;
string booksSchemaFile = Path.Combine(Request.PhysicalApplicationPath, "books.xsd");
settings.Schemas.Add(null, XmlReader.Create(booksSchemaFile));
settings.ValidationType = ValidationType.Schema;
settings.ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings;
settings.ValidationEventHandler += new ValidationEventHandler(settings_ValidationEventHandler);
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;
string booksFile = Path.Combine(Request.PhysicalApplicationPath, "books.xml");
using (XmlReader reader = XmlReader.Create(booksFile, settings))
{
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element &&
author.Equals(reader.LocalName))
{
//Then use the factory to create and cache serializers
XmlSerializer xs = factory.CreateSerializer(typeof(Author));
Author a = (Author)xs.Deserialize(reader.ReadSubtree());
Response.Write(String.Format("Author: {1}, {0}<BR/>",
a.FirstName, a.LastName));
}
}
}
}
void settings_ValidationEventHandler(object sender, System.Xml.Schema.ValidationEventArgs e)
{
Response.Write(e.Message);
}
或者
XDocument booksXML = XDocument.Load(Server.MapPath("books.xml"));
XNamespace ns = "http://example.books.com";
var authors = from book in booksXML.Descendants(ns + "author")
select new Author
{
FirstName = book.Element(ns + "first-name").Value,
LastName = book.Element(ns + "last-name").Value
};
foreach (Author a in authors)
{
Response.Write(String.Format("Author: {1}, {0}<BR/>", a.FirstName, a.LastName));
}
附:Books.xml
< ?xml version='1.0'?>
< !-- This file is a part of a book store inventory database -->
< bookstore xmlns="http://example.books.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://example.books.com Books.xsd">
<book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<first-name>Sidas</first-name>
<last-name>Plato</last-name>
</author>
<price>9.99</price>
</book>
< /bookstore>
Books.xsd
< ?xml version="1.0" encoding="utf-8"?>
< xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://example.books.com" xmlns="http://example.books.com" targetNamespace="http://example.books.com" elementFormDefault="qualified">
<xsd:element name="bookstore" type="bookstoreType" />
<xsd:complexType name="bookstoreType">
<xsd:sequence maxOccurs="unbounded">
<xsd:element name="book" type="bookType" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="bookType">
<xsd:sequence>
<xsd:element name="title" type="xsd:string" />
<xsd:element name="author" type="authorName" />
<xsd:element name="price" type="xsd:decimal" />
</xsd:sequence>
<xsd:attribute name="genre" type="xsd:string" />
<xsd:attribute name="publicationdate" type="xsd:string" />
<xsd:attribute name="ISBN" type="xsd:string" />
</xsd:complexType>
<xsd:complexType name="authorName">
<xsd:sequence>
<xsd:element name="first-name" type="xsd:string" />
<xsd:element name="last-name" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
< /xsd:schema>
0 0
- C# XmlReader
- C# XmlReader
- C# XmlReader 处理XML文档
- XmlReader
- C#中使用XMLReader读取XML文件
- C#读取xml 类 XmlReader 详解
- C# 关于 xmlreader xmldocument 和xpath 之间的性能比较
- C#中 XML 读写文件的方法(xmlreader,xmlwriter)
- 浅谈 XmlReader
- xmlReader.cpp
- XMLReader类
- XmlReader类
- XmlTextReader(xmlReader);
- 在C#中实现用XmlReader读取Excel 2007的文件
- C#温故而知新学习系列之XML编程—2-Xml读取器XmlReader类
- XMLReader xmlReader = saxParserFactory.newSAXParser().getXMLReader();
- [Config]Code-xmlreader
- XmlReader读取、显示.xml
- Java实现Excel导入数据库,数据库中的数据导入到Excel
- 组合查询——模版方法
- MATLAB产生1到N的有序数组,重新随机排列数组,删除数组中某一个元素
- Unity3D ARPG游戏开发《最初的幻想》之GUI背包系统实现
- D的小L
- C# XmlReader
- Cocos2D-X与Win32开发环境搭建
- Shuffle过程剖析及性能优化
- 哥私房菜基础篇: 第一章、Linux是什麼
- 【Eclipse AST】AST与ASTView简介 .
- Target runtime jdk is not defined 项目上红叉报错解决方法
- 快速理解Kafka分布式消息队列框架
- CSS清除浮动2
- 串口编程