科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道.NET Framework轻松处理XML数据

.NET Framework轻松处理XML数据

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

     在。net Framework中,XMLTextReader和XmlTextWriter类提供了对xml数据的读和写操作。在本文中,作者讲述了XML阅读器(Reader)的体系结构及它们怎样与XMLDOM 和SAX 解释器结合。

作者:中国IT实验室 来源:中国IT实验室 2007年10月2日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

  

    Figure 3 Outputting an XML Document Node Layout
  ??string GetXmlFileNodeLayout(string file)
  ??{
  ??// 创建一个XmlTextReader类使它指向目标XML文档
  ??XmlTextReader reader = new XmlTextReader(file);
  ??// 循环取出节点的文本并放入到StringWriter对象实例中
  ??StringWriter writer = new StringWriter();
  ??string tabPrefix = "";
  ??while (reader.Read())
  ??{
  ??// 写开始标志,如果节点类型为元素
  ??if (reader.NodeType == XmlNodeType.Element)
  ??{
  ??//根据元素所处节点的深度,加入reader.Depth个tab符,然后把元素名写入到<>中。
  ??tabPrefix = new string(’\t’, reader.Depth);
  ??writer.WriteLine("{0}<{1}>", tabPrefix, reader.Name);
  ??}
  ??else
  ??{
  ??//写结束标志,如果节点类型为元素
  ??if (reader.NodeType == XmlNodeType.EndElement)
  ??{
  ??tabPrefix = new string(’\t’, reader.Depth);
  ??writer.WriteLine("{0}", tabPrefix, reader.Name);
  ??}
  ??}
  ??}
  ??// 输出到屏幕
  ??string buf = writer.ToString();
  ??writer.Close();
  ??// 关闭流
  ??reader.Close();
  ??return buf;
  ??}
  
  ??图三演示了一个简单的用于输出一个给定的XML文档的节点元素的函数。该函数先打开一个XML文档,然后用循环处理XML文档中所有的内容。每次调用Read方法,阅读器的指针都会向下移一个节点。大部分情况下,用Read方法可以处理的元素节点,但有时候,当你从一个节点移动到下一个节点时,可能是在两个不同类型的节点间移动。但是Read方法不能在属性节点之间移动。阅读器的MoveToContent方法可以让指针从头部节点位置跳到第一个内容节点位置。在ProcessingInstruction, DocumentType, Comment, Whitespace和SignificantWhitespace类型节点中也可以用Skip方法移动指针。
  ??每个节点的类型是XmlNodeType枚举中的一种,在如图三所示的代码中,我们只用了其中的两种类型:Element 和 EndElement。输出源码重新定制了原始的文档结构,它丢弃或者说是忽略了XML元素的属性和节点内容,只输出了元素节点名。假设我们运用了下面的XML片断:
  ??<mags>
  ??<mag name="MSDN Magazine">
  ??MSDN Magazine
  ??</mag>
  ??<mag name="MSDN Voices">
  ??MSDN Voices
  ??</mag>
  ??</mags>
  ??用上面的程序输出的结果如下:
  ??<mags>
  ??<mag>
  ??</mag>
  ??<mag>
  ??</mag>
  ??</mags>
  ??子节点的缩进量是根据阅读器的深度属性(Depth属性)设置的,Depth属性返回一个整形的数据,它表示当前节点的嵌套层次。所有文本都放在StringWriter对象中(一个非常方便的基于流的封装了StrigBuilder类的类)。
  ??如前所述,阅读器不会自动通过Read方法访问属性节点。要访问当前元素的属性节点集合,必须用一个简单的用MoveToNextAttribute方法的返回值控制的循环去遍历该集合。下面的代码用于访问当前节点的所有属性,并把属性的名称和它的值用逗号分开组合成一个字符串:
  ??if (reader.HasAttributes)
  ??while(reader.MoveToNextAttribute())
  ??buf += reader.Name + "=\"" + reader.Value + "\",";
  ??reader.MoveToElement();
  ??当你完成对属性集的处理时,调用MoveToElement方法使指针返回到属性所属的元素节点。准确的说,MoveToElement方法并不是真正的移动指针,因为在处理属性集时指针从来就没有从元素节点中移开。MoveToElement方法只不过指向某个内部成员,并依次取得成员的值。例如,用Name属性获得某个属性的属性名,然后调用MoveToElement方法把指针移到其所属的元素节点处。但是当你不需要继续处理别的节点时,就不必再调用MoveToElement方法了。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    閭欢璁㈤槄

    濡傛灉鎮ㄩ潪甯歌揩鍒囩殑鎯充簡瑙T棰嗗煙鏈€鏂颁骇鍝佷笌鎶€鏈俊鎭紝閭d箞璁㈤槄鑷抽《缃戞妧鏈偖浠跺皢鏄偍鐨勬渶浣抽€斿緞涔嬩竴銆�

    重磅专题
    往期文章
    最新文章