进入旧版 | 服务项目 | 成功案例 | 联系方式 | 过客留言 | 友情链接
   
设为首页
加入收藏
联系我们
网站首页 | 新闻资讯 | 操作系统 | 办公软件 | 网络软件 | 工具软件 | 媒体动画 | 网页制作 | 网站开发 | 程序开发 | 平面设计
Photoshop视频教程 | Word入门 | Flash入门 | JScript | VBScript | ASP | PHP | ADO | 网页特效 | 3DS MAX6.0命令 | 系统进程
您当前的位置:GOODSGY电脑学习网 -> 网站开发 -> XML/SOAP -> 文章内容  
在.NET Framework中轻松处理XML数据(2-1)

分析属性值

大部分情况下,属性值都是一个简单的文本字符串。然而,这并不意味着实际应用中的属性值都是字符型的。有时候,属性值是由许多种类型的数据组合而成的,例如Date或Boolean,这时,你就要用XMLConvert或System.Convevt类的方法把这些类型转换成原来的类型。XMLConvert和System.Convevt类都能实现数据类型的转换,但是XMLConvert类依据XSD中指定的数据类型进行转换,而不管它现在是什么类型。

假设你有以下的XML数据片断:



让我们先确认,birthdaay属性值是February 8, 2001,如果你用System.Convert类把该字符串转换成.NET Framework中的DateTime类型,这样,我们就可以把它当成date类型使用了。相比下,如果你用XMLConvert类来转换字符串,你将看到一个分析错误,因为XMLConvert类不能正确解释这个字符串中的日期。因为在XML中,日期型数据的格式必须是YYYY-MM-DD形式的。XMLConvert类担任CLR类型与XSD类型之间的相互转换工作。当转换工作发生时,转换结果是局部的。

在某些解决方案中,属性值是由纯文本和实体共同组成的。在所有的阅读器类中,只有XMLValidatingReader类能处理实体。XMLTextReader虽然不能处理实体,但它们同时出现在属性值中的时候,它只能把文本值取出来。出现这种情况,你必须用ReadAttributeValue方法替代简单的读方法来分析属性值的内容。

ReadAttributeValue方法分析属性值,然后把各个组成的要素分隔开(如把纯文本和实体分开)。你可以用ReadAttributeValue方法的返回值作为循环条件,遍历整个属性值中的要素。既然XMLTextReader类不能处理实体,那么你可以自己写一个用于处理实体的类。下面的代码片断演示了怎么调用一个自定义的处理类:

while(reader.ReadAttributeValue())

{

if (reader.NodeType == XMLNodeType.EntityReference)

// Resolve the "reader.Name" reference and add

// the result to a buffer

buf += YourResolverCode(reader.Name);

else

// Just append the value to the buffer

buf += reader.Value;

}

当属性值全部被分析后,ReadAtributeValue方法返回False, 从而结束循环。属性值的最终结果就是全局变量buffer的值了。

处理XML文本(Text)

当我们在处理XML标签文本时,如果不能正确的处理,它的错误原因能很快地确定。例如一个字符转换错误,它必然是传输了非XML文本到一个XML数据流中。不是所有在给定的平台中有效的字符都是有效的XML字符。只有在XML规范(www.w3.org/TR/2000/REC-XML-20001006.HTML)中规定的有效的字符才能安全的用作元素和属性名。

XMLConvert类提供了把非XML标准的命名转换成标准的XML命名的功能。当标签名中包含有无效的XML字符时,EncodeName 和 DecodeName方法能把它们调整成符合Schema的XML命名。包括SQL Server™ 和Microsoft office,这些应用程序允许及支持Unicode文档,然而,这些文档中的字符有些也不是有效的XML命名。典型的情况是在你处理数据库中包含空格的列名时。虽然SQL Server允许长列名,但这对XML流来说可能就不是有效的命名。空格会被十六进制代码Invoice_0x0020_Details替代。下面的代码演示了怎么样在程序中获得该字符串:

XMLConvert.EncodeName("Invoice Details");

与此相反的方法是DecodeName。该方法把XML文本转换成其原始的格式。要注意的是它只能转换完整的十六进制代码,只有_0x0020_才被当成一个空格,而_0x20_就不是了:

XMLConvert.DecodeName("Invoice_0x0020_Details");

在XML文档中的空格即重要也不重要。说它重要,是当它出现在元素的内容中或者它在注释语句中时,它能表示实际意义。例如下面的情况:



<MyNode XML:space="preserve">

<!-- any space here must be preserved -->

•••

</MyNode>

在XML中,空格不只是代表空格(空白),也代表回车、换行和缩进。

通过XMLTextReader类的WhiteSpaceHandling属性你可以处理空格。这个属性接受及返回一个WhiteSpaceHandling枚举值(该枚举类有三种可选值)。默认值是All,它表示有意义和无意义的空格都会作为节点返回---- 分别为SignificantWhitespace和Whitespace节点。 另一个枚举值是None,它表示对任何空格都不作为节点返回。最后,就是Signficant枚举值,它表示忽略没有意义的空格,而只返回节点类型为SignficantWhitespace的节点。注意WhiteSpaceHandling属性是少数阅读器属性中的一个。它能被改变在任何时候和给Read操作带来影响。而Normalization及 XMLResolver属性是“Sensitive”的。

在百度中搜索:在.NET Framework中轻松处理XML数据(2-1)
在Google中搜索:在.NET Framework中轻松处理XML数据(2-1)
在Yahoo中搜索:在.NET Framework中轻松处理XML数据(2-1)

收藏到网摘:新浪VIVI 365key 我摘 POCO网摘 博采中心 YouNote 和讯网摘 天天收藏
[] [返回上一页] [打 印] [收 藏]

 相关文章    最新文章
· 在.NET 2.0框架下动态创建Access数据库和..
· sql2005的xml字段类型在.net中的应用1
· sql2005的xml字段类型在.net中的应用2
· sql2005的xml字段类型在.net中的应用3
· 在.NET中嵌入和使用资源文件
· 在.Net 里用XPath的case-insensitiv..
· 在.NET Framework中轻松处理XML数据(5-2)..
· 在.NET Framework中轻松处理XML数据(5-1)..
· 在.NET Framework中轻松处理XML数据(4-4)..
· 在.NET Framework中轻松处理XML数据(4-3)..
 
· XML和XSLT结合进行网站设计
· 网页教程:XML技巧五则
· XML语法概述
· XML轻松学习手册
· XML 中的常见问题(3)
· XML 中的常见问题(2)
· XML 中的常见问题(1)
· 用XSLT生成网页菜单(2)
· 用XSLT生成网页菜单(1)
· 将改变我们生活的这些XML应用之二

∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论…]
站内搜索

精彩图文
  网站导航  
操作系统 办公软件 网络软件
Vista Windows2003 WindowsXP Windows2000/NT Windows9X/ME Linux 其他 Word Excel Powerpoint Outlook 金山系列 其他 网页浏览 上传下载 联络聊天 邮件工具 服务器软件 网络辅助
工具软件 媒体动画 网页制作
系统工具 媒体工具 压缩工具 图文处理 文件管理 其他 3DMAX Authorware Director Maya 视频处理 其他 Flash Dreamweaver FireWorks FrontPage LiveMotion Golive HTML/CSS 其它
网站开发 平面设计 程序设计
ASP JSP PHP CGI JavaScript VBScript XML/SOAP Web服务器 Photoshop PhotoImpact CorelDraw Illustrator Freehand 设计欣赏 其他 VB VC .NET C/C++ DELPHI JAVA

冀ICP备05019428号
Copyright © 2004-2008 电脑学习网 Inc.All rights reserved.
TEL:13832340607
QQ:39873155
E_Mail:goodsgy(#)hotmail.com   (把(#)替换成@)
MSN:goodsgy(#)hotmail.com   (把(#)替换成@)