在Silverlight 1.1中,C#只能用XmlReader这样一个非常轻量级的东西来解析XML,因此稍有不慎就会出现很多非常奇怪的错误,在这里对XML的解析做一个简单的流程介绍吧。
在对流式XML的解析中,XmlReader对XML节点进行一些区分,这些节点的类型包括:
引用内容:
public enum XmlNodeType
{
None = 0,
Element = 1,
Attribute = 2,
Text = 3,
CDATA = 4,
EntityReference = 5,
Entity = 6,
ProcessingInstruction = 7,
Comment = 8,
Document = 9,
DocumentType = 10,
DocumentFragment = 11,
Notation = 12,
Whitespace = 13,
SignificantWhitespace = 14,
EndElement = 15,
EndEntity = 16,
XmlDeclaration = 17,
}
其中常用到的有Element、Attribite、Text、CDATA、EndElement等。其中Element类型的节点为“<item>”形式,EndElement的的节点为“</item>”形式,而Text类型则可以为一对标记之间的文本内容或者节点之间的空格、换行等。
了解了这些,我们再来看怎么从一个XML文件流中找出自己想要的数据。首先假设有一个这样的XML数据流,其XML结构如下:
引用内容:
<root><br><item><br><title>网球王子</title>
<br><catalog>热门动漫</catalog><br><author>OOboy.net</author><br><email></email><br><modified>Thu, 16 Aug 2007 09:39:19 GMT</modified><br></item><br><item><br><title>越狱</title>
<br><catalog>海外剧场</catalog><br><author>OOboy.net</author><br><email></email><br><modified>Thu, 16 Aug 2007 09:39:19 GMT</modified><br></item><br></root>
我们用XmlReader的Create方法从这个Stream中创建了一个XmlReader对象,现在我们解析出想要的数据——item项目中的各个子项:Title、Catalog、Author、Email、Modified。
解析过程在下面代码的注释中:
引用内容:
//reader是一个XmlReader实例
//开始读取流,直到读完为止
//reader.Read()每次读取一个XML节点(XML节点的描述在本文开头)
while (reader.Read())
{
//如果该节点是一个开始节点,而且节点的名称叫做item
//那么我们继续读取item子树
if ((reader.IsStartElement()) && (reader.LocalName == "item"))
{
//创建一个新的Item对象,后面把数据保存到Item对象中
Item item = new Item();
//继续读取Item下面的内容
using (XmlReader itemReader = reader.ReadSubtree())
{
//开始读取Item下面的内容,知道读完Item子树为止
//当碰到节点时会跳出循环
while (itemReader.Read())
{
//如果找到一个Element,我们就读取其中的值
//用这种节点可以忽略空格、回车等等
if (itemReader.NodeType == XmlNodeType.Element)
{
//如果是空节点,比如上文中的<email></email>这样的节点
//此时读取下一个节点,否则会出错
if (itemReader.IsEmptyElement)
{
continue;
}
//如果不是空节点
//把节点的name记录下来
string nodeName = itemReader.Name;
//读取节点内地文本节点
itemReader.Read();
if (itemReader.NodeType == XmlNodeType.Text)
{
//根据节点的name,把值保存到Item对应的属性中
switch (nodeName.ToUpper())
{
case "TITLE":
item.title = itemReader.Value;
break;
case "CATALOG":
item.catalog = itemReader.Value;
break;
case "AUTHOR":
item.author = itemReader.Value;
break;
case "EMAIL":
item.email = itemReader.Value;
break;
case "MODIFIED":
item.modified = itemReader.Value;
break;
}
}
//读取完成,再读结束节点End Element
itemReader.Read();
}
}
}
}
}
分享到:
相关推荐
beginning silverlight 4 in C# ,silverlight 入门书籍
Beginning Silverlight 5 in C#.pdf Beginning Silverlight 5 in C#.pdf
Silverlight使用XmlReader读取XML并加载到TreeView
实现了silverlight页面与c#程序的通讯,可以扩展以实现silverlight不能做或做不好而C#程序能做的很好的功能,比如打印文档。VS2013写的silverlight版本5.0,下载前请看好。
基于Silverlight2+C#实现的Forms窗体间的参数传递程序例子代码。
Apress Pro Silverlight 2 in C# 2008
Pro-Silverlight2.0 in C# 2008,一本Silverlight2.0 + C# 2008开发的好书,学习silverlight的好书!
Pro Silverlight 2 in C# 2008 英文原版 PDF格式
Pro Silverlight 3 in C# 是用C#开发Silverlight应用的好书。
Pro Silverlight 3 in C# 是用C#开发Silverlight应用的好书。
Pro Silverlight 5 in C# Silverlight is a framework for building rich, browser-hosted applications that run on a variety of operating systems. Silverlight works its magic through a browser plug-in. ...
英文书名:Pro Silverlight 3 in C# 最新版本的高级开发流程,最高效的Silverlight精深途径
Silverlight SCADA C#版
最新的Pro Silverlight 5 in C#
Silverlight 3 is the latest iteration of Microsoft's cross-browser technology for creating rich user experiences on the Web. Like its predecessor, Silverlight 2, it rides atop the .NET Framework for ...