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

XML数据处理技巧
本文介绍了如何处理XML数据中的各种复杂情况,包括属性值分析、文本处理、字符串与片段的加载等。重点讲解了如何利用XmlConvert类进行数据类型转换及特殊字符处理。
分析 属性
假设你有以下的 XML数据片断:

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;
}
处理 XML文本(Text)
XmlConvert.EncodeName("Invoice Details");
XmlConvert.DecodeName("Invoice_0x0020_Details");
 
<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

程序员把在MS XML的程序剪切下来,会发现在COM和.NET Framework XML API 之间的差别很大。.NET Framework类本身没有提供方法去分析存储在字符串中 XML数据。不像MS XML分析器对象,XmlTestReader类没有提供任何一种Load XML方法从一个格式良好的字符中创建阅读器。没有提供类似Load XML的方法因为你可以用特殊的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类解释。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值