Silverlight 2使用C#遍历XML(兼容Silverlight3)

2016-08-20 10:51:23来源:http://dotfun.blog.51cto.com/663391/285674作者:dotfun人点击


在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类型的节点为“”形式,EndElement的的节点为“”形式,而Text类型则可以为一对标记之间的文本内容或者节点之间的空格、换行等。
了解了这些,我们再来看怎么从一个XML文件流中找出自己想要的数据。首先假设有一个这样的XML数据流,其XML结构如下:
引用内容:
热门动漫 OOboy.net Thu, 16 Aug 2007 09:39:19 GMT 海外剧场 OOboy.net Thu, 16 Aug 2007 09:39:19 GMT
我们用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) { //如果是空节点,比如上文中的这样的节点 //此时读取下一个节点,否则会出错 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(); } } } } }

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台