加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用XmlReader读Xml

发布时间:2020-12-16 06:03:22 所属栏目:百科 来源:网络整理
导读:XmlDocument 和XElement在读取Xml时要将整个Xml文档放到内存中去操作,这样做操作简单,但是很费内存和IO(可能是磁盘IO或者网络IO);而在有些场景下我们必须考虑尽可能节省内存和IO的开销,这时候就该XmlReader和XmlWriter出场了。 XmlReader读取Xml需要通
XmlDocument和XElement在读取Xml时要将整个Xml文档放到内存中去操作,这样做操作简单,但是很费内存和IO(可能是磁盘IO或者网络IO);而在有些场景下我们必须考虑尽可能节省内存和IO的开销,这时候就该XmlReader和XmlWriter出场了。
XmlReader读取Xml需要通过Read()实例方法,不断读取Xml文档中的声明,节点开始,节点内容,节点结束,以及空白等等,直到文档结束,Read()方法返回false。

如下读取Xml内容实例代码和注释说明

[csharp] view plain copy
  1. //玉开技术博客:http://blog.csdn.net/yukaizhao
  2. usingSystem;
  3. usingSystem.Collections.Generic;
  4. usingSystem.Text;
  5. usingSystem.Xml;
  6. usingSystem.IO;
  7. namespaceUseXmlReader
  8. {
  9. classProgram
  10. staticvoidMain(string[]args)
  11. //声明StringReader传入Xml文本,作为XmlReader.Create的参数
  12. using(StringReaderstrRdr=newStringReader(@"<?xmlversion=""1.0""encoding=""utf-8""?>
  13. <root>
  14. <catcolor=""white"">I'maCat</cat>
  15. <dogcolor=""yellow""/>
  16. </root>"))
  17. {
  18. //通过XmlReader.Create静态方法创建XmlReader实例
  19. using(XmlReaderrdr=XmlReader.Create(strRdr))
  20. //循环Read方法直到文档结束
  21. while(rdr.Read())
  22. Console.WriteLine("rdr.NodeType="+rdr.NodeType);
  23. //如果是开始节点
  24. if(rdr.NodeType==XmlNodeType.Element){
  25. //通过rdr.Name得到节点名
  26. stringelementName=rdr.Name;
  27. Console.WriteLine(elementName+"elementstart");
  28. if(elementName=="root"){
  29. }
  30. //读取到cat元素这时rdr.Read()读取到的内容为<catcolor="white">
  31. elseif(elementName=="cat")
  32. //可以通过中括号获得属性值
  33. stringcolorVal=rdr["color"];
  34. Console.WriteLine("tcat'scoloris"+colorVal);
  35. //读取到节点内文本内容
  36. if(rdr.Read()){
  37. //通过rdr.Value获得文本内容
  38. Console.WriteLine("tcatsaid:"+rdr.Value);
  39. }
  40. if(rdr.NodeType==XmlNodeType.EndElement)
  41. //在节点结束时也可以通过rdr.Name获得节点名字
  42. stringelementName=rdr.Name;
  43. Console.WriteLine(elementName+"elementend");
  44. Console.Read();
  45. }

如果觉得代码不明白,下面是一张读取顺序图,标明了读取顺序号和每次读取的内容,如下图所示:


从图中可以看到XmlReader在读取这段Xml时: 第1次Read()读取的是Xml文档声明部分 第2次Read()读取的是声明后的空白 第3次Read()读取的是根节点root的开始标签 第4次Read()读取的是根节点开始后的空白 第5次Read()读取的是cat节点的开始部分,从左尖括号到右尖括号包括该节点的属性 第6次读取的是cat节点的内容 第7次读取的是cat节点的结束标签 第8次读取的是cat节点结束标签后的空白 第9次读取的是dog节点的开始部分,注意是从左尖括号开始到结束斜杠之前 第10次读取的是dog标签的结束/> 第11次读取的是dog标签结束后的空白 第12次读取的是root的结束标签

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读