首页 > Java > java教程 > 正文

在.NET Framework中轻松处理XML数据(2-1)

黄舟
发布: 2016-12-20 14:05:48
原创
1401人浏览过

??分析属性值 

??大部分情况下,属性值都是一个简略的文本字符串。然而,这并不意味着实际利用中的属性值都是字符型的。有时候,属性值是由很多种类型的数据组合而成的,例如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) 的内容,更多相关内容请关注PHP中文网(www.php.cn)! 

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号