转载:.NET Framework轻松处理XML数据(二)

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

转载自:http://www.admin5.com/html/edu/Pro/xml/20061226/32118.html


分析属性值
  大部分情况下,属性值都是一个简单的文本字符串。然而,这并不意味着实际应用中的属性值都是字符型的。有时候,属性值是由 许多种类型的数据组合而成的,例如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”的。
  String和Fragment
  程序员把在MSXML的程序剪 切下来,会发现在COM和.NET Framework XML API 之间的差别很大。.NET Framework类本身没有提供方法去分析存储在 字符串中XML数据。不像MSXML分析器对象,XmlTestReader类没有提供任何一种LoadXML方法从一个格式良好的字符中创建阅读器。没 有提供类似LoadXML的方法因为你可以用特殊的text reader---StringReader类来获得同样的功能。
   XmlTextReader其中一个构造函数接受一个TextReader派生对象和一个XML reader作参数(该阅读器以 text reader的内容为基础创建)。一个text reader类是一个流,这个流是输入的字符经优化生成的。StringReader类继承 TextReader类,并用一个内存中字符串作为其输入流。下面的代码片断演示了怎样初始化一个XML reader,用一个格式良好的XML 字符串 作为其输入:
  string xmlText = "...";
  StringReader strReader = new StringReader(xmlText);
  XmlTextReader reader = new XmlTextReader(strReader);

  另外,用StringWriter类代替TextWrite类,你可以从内存字符中创建一个XML文档。
   一个指定类型的XML字符串是一个XML片断(fragment). XML片断由XML文本构成,但没有根节点的XML文档不是格式良好的XML文 档,所以不能被应用。一个XML片断是原始的文档的一部分,所以它可能缺少根节点。例如,下面的XML文本是一个有效的XML 片断,但不是一个有效的 XML文档,因为它没有根节点:
  Dino
  Esposito
  .NET Framework XML API允许程序员把XML片断与一个分析器内容结合使用,分析器内容由类似encoding字符集,DTD文档,命名空间,语言和空格处理程序构成:
  public XmlTextReader(
  string xmlFragment,
  XmlNodeType fragType,
  XmlParserContext context
  );
   xmlFragment参数包括了XML字符串分析。FragType参数表示fragment的类型,它给出了fragment根节点的类型。只有 element,attibute和document类型的节点才能作为fragment的根节点,分析器的内容才能被XmlParserContext 类解释。
 
如何在XML响应中将“ <”和“>”转换为xml标记 以下文章可能对您有帮助:转义和不转义文本[^] 立即下载

相关推荐

深入理解DQN中的Q值:核心概念和应用

在强化学习中,Q值(或称为动作价值函数)是核心概念之一。Q值函数 ( Q(s, a) ) 表示在给定状态 ( s ) 下,采取动作 ( a ) 并遵循某策略后,智能体从当前状态到未来状态所能获得的预期总回报。简言之,Q值是评估特定状态和动作对的好坏的指标。

qlkaicx的博客 2952

NET Framework轻松处理XML数据(3)

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

1112

汽车软件工程师必看:ASPICE开发流程全解析(附各阶段交付物清单)

本文全面解析了汽车行业广泛采用的ASPICE开发流程,详细介绍了从需求挖掘到系统架构设计、软件工程及测试验证各阶段的关键操作和交付物清单。针对汽车软件工程师,提供了实用的协作指南和工具推荐,帮助团队提升开发效率并降低项目风险,是掌握ASPICE标准的必备指南。

weixin_30733003的博客 600

.NET Framework轻松处理XML数据()

.NET Framework轻松处理XML数据()分析属性值大部分情况下,属性值都是一个简单的文本字符串。然而,这并不意味着实际应用中的属性值都是字符型的。有时候,属性值是由许多种类型的数据组合而成的,例如Date或Boolean,这时,你就要用XmlConvert或System.Convevt类的方法把这些类型转换成原来的类型。XmlConvert和System.Convevt

Neo in SAP 1558

.net xml中无效字符处理

        ///         /// 将部分无效字符替换成空        ///         /// Gta服务器Response后返回的Xml数据        /// string         private string ConvertHex(string responseXml)        {            UTF8Encoding encoding = n

cxzhq2002的杂记 2249

转载.NET Framework轻松处理XML数据()

 转载自:http://www.admin5.com/html/edu/Pro/xml/20061226/32120.htmlXmlTextWriter类    用在本节中的方法创建XML文档显然并不困难。多年以来,开发者都是通过在缓存在连接一些字符串,连接好以后再把缓存中字符串输出到文件的方式来创建 XML文档。但是以这种方式创建XML文档的方法只有在你保证字符串中不存在任何细小的错误的时候才有

prophet08的专栏 497

转载.NET Framework轻松处理XML数据()

 在. NET Framework中,XmlTextReader和XmlTextWriter类提供了对xml数据的读和写操作。在本文中,作者讲述了XML 阅读器(Reader)的体系结构及它们怎样与XMLDOM 和SAX 解释器结合。作者也演示了怎么样运用阅读器分析和验证XML文档,怎么样创建格式 良好的XML文档,以及怎么样用函数读/写基于Base64和BinHex编码的大型的XML文档。最后,

prophet08的专栏 531

转载.NET Framework轻松处理XML数据(5)

 转载   www.ASPCool.comXMLTextWriter类     用在本节中的方法创建XML文档显然并不困难。多年以来,开发者都是通过在缓存在连接一些字符串,连接好以后再把缓存中字符串输出到文件 的方式来创建XML文档。但是以这种方式创建XML文档的方法只有在你保证字符串中不存在任何细小的错误的时候才有效。.net Framework通过用XMLwriter提供了更好的创建XML

prophet08的专栏 627

php .net2 .net4,在.NET Framework轻松处理XML数据(4-2)

Figure 7 States for XML WriterStateDescriptionAttributeThe writer enters this state when an attribute is being writtenClosedThe Close method has been called and the writer is no longer available for w...

weixin_35201342的博客 126

转载.NET Framework轻松处理XML数据()

转载自:http://www.admin5.com/html/edu/Pro/xml/20061226/32119.html带验证的阅读器    XmlValidatingReader类实现了XmlReader类,它提供了支持多种类型的XML验证:DTD,XML-Data Reduced (XDR)架构,以及XSD,DTD和XSD都是W3C官方推荐的。而XDR是Microsoft早期用于处理XML

prophet08的专栏 582

转载.NET Framework轻松处理XML数据(7)

转载   www.ASPCool.com设计XMLReadWriter类     如前面所说,XML reader和Writer是各自独立工作的:reader只读,writer只写。假设你的应用程序要管理冗长的XML文档,且该文档有不确定的数据。 Reader提供了一个很好的方法去读该文档的内容。另一方面,Writer是一个非常有用的用于创建XML文档片断工具,但是如果你想要它即能读,又能 写,

prophet08的专栏 622

转载.NET Framework轻松处理XML数据(6)

 转载   www.ASPCool.com读写流        有趣的是,reader(阅读器)和writer类提供了基于Base64 和BinHex编码的读写数据流的方法。WriteBase64 和 WriteBinHex方法的功能与其它的写方法的功能存在着细微的差别。它们都是基于流的,这两个方法的功能像一个byte数组而不是一个 string。下面的代码首先把一个string转换成一个by

prophet08的专栏 502

.NET Framework轻松处理XML数据

http://topic.csdn.net/t/20030523/16/1825086.html http://www.sosuo8.com/article/show.asp?id=1305 http://www.cnblogs.com/angelfeather/articles/767415.html 转载:https://www.cnblogs.com/29...

weixin_30877227的博客 118

.Net Framework

.Net Framework 提供了一整套应用程序的开发平台,它实际上是有一大堆的技术组合而成,这些技术彼此协作,能为开发人员提供无限的运用。 .Net Framework 由以下几部分组成: .Net语言包:包括Visual Basic.NET,C#,J#和c++等; 通用语言运行时(CLR:Common Language Runtime):提供所有.Net 程序的...

weixin_33698823的博客 109

【新品上架】数据分析工具FastCube.Net暖春来袭,使您轻松分析数据并构建汇总表...

FastCube.Net——一种有效的数据分析工具 FastCube使您能够分析数据并构建汇总表(数据切片),以及轻松,即时地创建各种报表和图表。它是高效分析数据阵列的便利工具。 立即下载最新试用版>> FastCube是一组OLAP桌面组件。 它支持 .Net Framework 4.与FastCube 2 VCL兼容。 FastCube组件可以内置到主...

301

浅谈对象的序列化(Serialize)

序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,就使得数据能够被轻松地存储和传输。 .NET Framework 提供两种序列化技术: 进制序列化保持类型保真度,这对于在应用程序的不同调用之间保留对象的状态很有用。例如,通过将对象序列化到剪贴板,可在不同的应用程序之间共享对象。您可以将对象序列化到流、磁盘、内存和网络等等。远...

weixin_30871701的博客 282

php service原理,轻松搞懂WebService工作原理

用更简单的方式给大家谈谈WebService,让你更快更容易理解,希望对初学者有所帮助。WebService是基于网络的、分布式的模块化组件。我们直接来看WebService的一个简易工作流程:客户端 ——>阅读WSDL文档(了解webservice的请求) ——> 调用WebService上面的流程是一个大致的描述,客户端阅读WSDL文档发送请求,然后调用Web服务器最后返回给客户端...

weixin_42520025的博客 133

谈谈:.Net中的序列化和反序列化

序列化和反序列化相信大家都经常听到,也都会用, 然而有些人可能不知道:.net为什么要有这个东西以及.net Frameword如何为我们实现这样的机制, 在这里我也是简单谈谈我对序列化和反序列化的一些理解。 一、什么序列化和反序列化 序列化通俗地讲就是将一个对象转换成一个字节流的过程,这样就可以轻松保存在磁盘文件或数据库中。反序列化是序列化的逆过程,就是将一个字节流转换回原来的对象的过程。 ...

weixin_30826761的博客 73

对话Spring.net

Spring.NET可以应用于许多场景。核心特性如依赖注入(DI)容器、AOP以及数据访问框架,都可以非常好地应用在任意的.NET应用程序中。它使得你能够创建更简单、更干净的应用程序。为了尽量消除它所带来的副作用,开发人员还可以免费获得功能强大的配置机制。 如果你正在编写一个ASP.NET Web应用程序,你可以考虑将Spring.NET Web框架(Spring.Web)加入其中。因为它是AS...

weixin_30586085的博客 107

图形图像处理CAD控件Vectordraw Developer Framework下载

下载该控件请到cad控件网www.cadkong.com VectorDraw Developer Framework (VDF)为您的应用程序增加动态的2D/3D图形。是一个可轻松创建爱你和管理及打印2D和3D图形的构件。 其对象可显示与大多数公共矢量格式和其他CAD对象兼容的方法和属性。 支持10多种矢量格式和多种离散格式。VectorDraw Developer Framework (...

weixin_30835923的博客 206
上一篇: 转载:.NET Framework轻松处理XML数据(一)
下一篇: 转载:.NET Framework轻松处理XML数据(三)
prophet08
博客等级 码龄19年 2粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值