1 要编写XML同样是采用流的概念,在.NET中编写XML的细节是作为XmlWriter类来实现的,但该类是抽象类不能够实例化,为此,我们要想在程序中访问它的方法以实现编写XML的愿望,必需使用它的派生类XmlTextWriter,该类提供了一系列的属性和方法为我们编写XML做准备,下面将详细的介绍这个类:
2
3 构造函数:
4
5 public XmlTextWriter(TextWriter);
6
7 public XmlTextWriter(Stream, Encoding);
8
9 public XmlTextWriter(string, Encoding);
10
11 第一个构造函数是把现有的TextWriter实例传递过去,System.IO.TextWriter类是一个有序的字符流
12
13 第二个构造函数是把要写入的流作为第一个参数,第二个参数是指定XML文档的编码方式,默认是UTF8,可取Encoding的枚举值,流可以是FileStream,MemoryStream,NetworkStream等等
14
15 第三个构造函数是把希望写入的文件名当作一个字符串(如果存在,就重写该文件)传递给第一个参数,第二个参数指定编码方式
16
17
18
19 常用的方法:
20
21 WriterStartDocument()和WriterEndDocument()方法:
22
23 第一个方法用来编写XML声明部分,如:<?xml version=”1.0” encoding=”UTF-8” ?>
24
25 第二个方法用来关闭任何打开的元素或属性并将编写器重新设置为 Start 状态。
26
27
28
29 WriterStartElement()和WriteEndElement()方法:
30
31 第一个方法用来写出指定的开始标记,该方法有以下几个重载:
32
33 WriterStartElement(string localname)
34
35 使用传递的字符串作为元素的本地名称
36
37 WriterStartElement(string localname,string namespace)
38
39 第一个参数指定元素的本地名称,第二个参数指定元素所在的命名空间
40
41 WriterStartElement(string prefix,string localname,string namespace)
42
43 第一个参数指定元素的前缀,第二个参数指定元素的本地名称,第三个参数指定元素所在的命名空间
44
45 第二个方法用来写出与开始元素对应的关闭元素,如果开始元素不包含任何内容,将用一个”/>”做为关闭元素
46
47
48
49 WriterStartAttribute()和WriterEndAttribute()方法:
50
51 第一个方法用于编写一个属性的开头,该方法有两个重载:
52
53 WriterStartAttribute(string localname,string namespace)
54
55 第一个参数指定属性的本地名称,第二个参数指定属性所在的命名空间
56
57 WriterStartAttribute(string prefix,string localname,string namespace)
58
59 第一个参数指定属性的前缀,第二个参数指定属性的本地名称,第三个参数指定属性所在的命名空间
60
61 第二个方法用于关闭WriterStartAttribute创建的属性
62
63
64
65 WriterElementString()方法:
66
67 该方法可以创建一个包含字符串值的元素,它有以下重载:
68
69 WriterElementString(string localname,string value)
70
71 如果编写这样的代码:WriterElementString(“para”,”Some text”) 将输出:<para>Some text</para>
72
73 WriterElementString(string localname,string namespace,string value)
74
75 如果编写这样的代码:WriterElementString(“para”,”http://www.w3.org/ns”,”Some text”) 将输出:<para xmlns=”http://www.w3.org/ns”>Some text</para>
76
77 如果编写嵌套几级的元素可使用WriterStartElement()和WriterEndElement()方法,如果编写直接包含内容的元素可以使用该方法
78
79
80
81 WriterAttributeString()方法:
82
83 类似与WriterElementString()方法,在使用上如果属性的值当中不包含实体可直接使用该方法来写出属性,如果属性值包含实体可使用WriterStartAttribute()和WriterEndAttribute()方法,例如要写出这样的XML——<para author=”Do&0241;a&L.Perez”/>,可编写以下代码:
84
85 WriterStartElement(“para”);
86
87 WriterStartAttribute(“author”,null);
88
89 WriterString(“Do”);
90
91 WriterCharEntiry(“~n”);
92
93 WriterString(“a”);
94
95 WriterCharEntiry(“&”);
96
97 WriterString(“L.Perez”);
98
99 WriterEndAttribute();
100
101 WriterEndElement();
102
103 该方法有以下重载:
104
105 WriterAttributeString(string localname,string value);
106
107 WriterAttributeString(string localname,string namespace,string value);
108
109 WriterAttributeString(string prefx, string localname,string namespace,string value);
110
111
112
113 WriterNode(XmlReader reader,bool defattr)方法:
114
115 该方法可以从XmlReader读取器中复制节点并把它们写入XmlWriter流中,第一个参数是XmlReader的实例,第二个参数接受一个布尔值,决定是否复制元素中的属性,考虑下面XML片段:
116
117 <para>
118
119 <sent>
120
121 The<b>XmlWriter</b>class writes XML content to a Stream.
122
123 </sent>
124
125 </para>
126
127 以下代码复制其中的片段,reader代表XmlReader的实例writer代表XmlWriter类的实例:
128
129 while(reader.Read())
130
131 {
132
133 if (reader.Name == ”sent” && reader.NodeType == XmlNodeType.Element)
134
135 {
136
137 writer.WriterNode(reader,true);
138
139 }
140
141 }
142
143 得到以下输出:
144
145 <sent>
146
147 The<b>XmlWriter</b>class writes XML content to a Stream.
148
149 </sent>
150
151
152
153 WriterComment(string text)方法:用于写出注释
154
155 WriterString(string text)方法:用于写出文本
156
157 WriterCData(string text)方法:写出CDATA数据块
158
159 WriterBase64(byte[] buffer,int index,int count)方法:将指定的二进制字节编码为 Base64 并写出结果文本
160
161 Flush():将缓冲区中的所有内容刷新到基础流,并同时刷新基础流
162
163 Close():关闭此流和基础流
164
165
166
167 以上对XmlTextWriter类的一些重要方法做了简单介绍,下面我们就来看一个例程,看看在程序中如何使用这些方法,照样还是先来看下运行效果图:
168
169
170 Example1按纽将向一个文件写出XML声明和一个元素节点以及节点内的文本,Example2按纽将在Example1的基础上添加属性节点,嵌套元素以及文本,WriteNode按纽使用WriterNode()方法在现有读取器中复制该读取器中的所有元素及属性并写到一个新的XML文档中,Example3按纽将写一份完整的XML文档,Example4按纽在Example3按纽的基础上另外生成一份文档并向该文档中追加CDATA部分,Example5按纽将使用WriterBase64()方法对一幅图片进行编码并将编码后的数据写到XML文档中,Example6按纽将使用Example5按纽中生成的XML读取其中数据并对其中编码数据进行解码最后生成一张图片。
171
172 以下是功能实现代码:
173 namespace XMLWriting
174
175 {
176
177 using System;
178
179 using System.IO;
180
181 using System.Text;
182
183 using System.Xml;
184
185 using System.Drawing;
186
187 using System.Collections;
188
189 using System.ComponentModel;
190
191 using System.Windows.Forms;
192
193 using System.Data;
194
195
196
197 /**//// <summary>
198
199 /// Form1 的摘要说明。
200
201 /// </summary>
202
203 public class Form1 : System.Windows.Forms.Form
204
205 {
206
207 private System.Windows.Forms.TextBox textBox1;
208
209 private System.Windows.Forms.Button button1;
210
211 private System.Windows.Forms.Button button2;
212
213 private System.Windows.Forms.Button button3;
214
215 private System.Windows.Forms.Button button4;
216
217 private System.Windows.Forms.Button button5;
218
219 private System.Windows.Forms.Button button6;
220
221 private System.Windows.Forms.Button button7;
222
223 /**//// <summary>
224
225 /// 必需的设计器变量。
226
227 /// </summary>
228
229 private System.ComponentModel.Container components = null;
230
231
232
233 public Form1()
234
235 {
236
237 //
238
239 // Windows 窗体设计器支持所必需的
240
241 //
242
243 InitializeComponent();
244
245
246
247 //
248
249 // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
250
251 //
252
253 }
254
255
256
257 /**//// <summary>
258
259 /// 清理所有正在使用的资源。
260
261 /// </summary>
262
263 protected override void Dispose( bool disposing )
264
265 {
266
267 if( disposing )
268
269 {
270
271 if (components != null)
272
273 {
274
275 components.Dispose();
276
277 }
278
279 }
280
281 base.Dispose( disposing );
282
283 }
284
285
286
287 Windows 窗体设计器生成的代码#region Windows 窗体设计器生成的代码
288
289 /**//// <summary>
290
291 /// 设计器支持所需的方法 - 不要使用代码编辑器修改
292
293 /// 此方法的内容。
294
295 /// </summary>
296
297 private void InitializeComponent()
298
299 {
300
301 this.textBox1 = new System.Windows.Forms.TextBox();
302
303 this.button1 = new System.Windows.Forms.Button();
304
305 this.button2 = new System.Windows.Forms.Button();
306
307 this.button3 = new System.Windows.Forms.Button();
308
309 this.button4 = new System.Windows.Forms.Button();
310
311 this.button5 = new System.Windows.Forms.Button();
312
313 this.button6 = new System.Windows.Forms.Button();
314
315 this.button7 = new System.Windows.Forms.Button();
316
317 this.SuspendLayout();
318
319 //
320
321 // textBox1
322
323 //
324
325 this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
326
327 | System.Windows.Forms.AnchorStyles.Left)
328
329 | System.Windows.Forms.AnchorStyles.Right)));
330
331 this.textBox1.Location = new System.Drawing.Point(0, 8);
332
333 this.textBox1.Multiline = true;
334
335 this.textBox1.Name = "textBox1";
336
337 this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Both;
338
339 this.textBox1.Size = new System.Drawing.Size(784, 332);
340
341 this.textBox1.TabIndex = 0;
342
343 this.textBox1.Text = "";
344
345 //
346
347 // button1
348
349 //
350
351 this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
352
353 this.button1.Location = new System.Drawing.Point(0, 344);
354
355 this.button1.Name = "button1";
356
357 this.button1.TabIndex = 1;
358
359 this.button1.Text = "Example1";
360
361 this.button1.Click += new System.EventHandler(this.button1_Click);
362
363 //
364
365 // button2
366
367 //
368
369 this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
370
371 this.button2.Location = new System.Drawing.Point(88, 344);
372
373 this.button2.Name = "button2";
374
375 this.button2.TabIndex = 2;
376
377 this.button2.Text = "Example2";
378
379 this.button2.Click += new System.EventHandler(this.button2_Click);
380
381 //
382
383 // button3
384
385 //
386
387 this.button3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
388
389 this.button3.Location = new System.Drawing.Point(176, 344);
390
391 this.button3.Name = "button3";
392
393 this.button3.TabIndex = 3;
394
395 this.button3.Text = "WriteNode";
396
397 this.button3.Click += new System.EventHandler(this.button3_Click);
398
399 //
400
401 // button4
402
403 //
404
405 this.button4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
406
407 this.button4.Location = new System.Drawing.Point(264, 344);
408
409 this.button4.Name = "button4";
410
411 this.button4.TabIndex = 4;
412
413 this.button4.Text = "Example3";
414
415 this.button4.Click += new System.EventHandler(this.button4_Click);
416
417 //
418
419 // button5
420
421 //
422
423 this.button5.Location = new System.Drawing.Point(352, 344);
424
425 this.button5.Name = "button5";
426
427 this.button5.TabIndex = 5;
428
429 this.button5.Text = "Example4";
430
431 this.button5.Click += new System.EventHandler(this.button5_Click);
432
433 //
434
435 // button6
436
437 //
438
439 this.button6.Location = new System.Drawing.Point(440, 344);
440
441 this.button6.Name = "button6";
442
443 this.button6.TabIndex = 6;
444
445 this.button6.Text = "Example5";
446
447 this.button6.Click += new System.EventHandler(this.button6_Click);
448
449 //
450
451 // button7
452
453 //
454
455 this.button7.Location = new System.Drawing.Point(528, 344);
456
457 this.button7.Name = "button7";
458
459 this.button7.TabIndex = 7;
460
461 this.button7.Text = "Example6";
462
463 this.button7.Click += new System.EventHandler(this.button7_Click);
464
465 //
466
467 // Form1
468
469 //
470
471 this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
472
473 this.ClientSize = new System.Drawing.Size(784, 373);
474
475 this.Controls.Add(this.button7);
476
477 this.Controls.Add(this.button6);
478
479 this.Controls.Add(this.button5);
480
481 this.Controls.Add(this.button4);
482
483 this.Controls.Add(this.button3);
484
485 this.Controls.Add(this.button2);
486
487 this.Controls.Add(this.button1);
488
489 this.Controls.Add(this.textBox1);
490
491 this.Name = "Form1";
492
493 this.Text = "XMLWriting";
494
495 this.ResumeLayout(false);
496
497
498
499 }
500
501 #endregion
502
503
504
505 /**//// <summary>
506
507 /// 应用程序的主入口点。
508
509 /// </summary>
510
511 [STAThread]
512
513 static void Main()
514
515 {
516
517 Application.Run(new Form1());
518
519 }
520
521
522
523 private void button1_Click(object sender, System.EventArgs e)
524
525 {
526
527 this.textBox1.Text = string.Empty;
528
529 const string fileName = "WriteXml.xml";
530
531
532
533 XmlTextWriter xmlTxtWt = new XmlTextWriter(fileName,Encoding.UTF8);
534
535
536
537 // 写XML文档声明
538
539 xmlTxtWt.WriteStartDocument();
540
541 // 写XML起始元素
542
543 xmlTxtWt.WriteStartElement("ct","ContactDetails","http://www.deltabis.com/Contact");
544
545 // 写文本
546
547 xmlTxtWt.WriteString("This is a XML file");
548
549 // 写XML结束元素
550
551 xmlTxtWt.WriteEndElement();
552
553 // 写关闭文档元素
554
555 xmlTxtWt.WriteEndDocument();
556
557
558
559 xmlTxtWt.Flush(); //刷新
560
561 xmlTxtWt.Close();
562
563
564
565 this.textBox1.Text = ReadXml(fileName);
566
567 }
568
569
570
571 /**//// <summary>
572
573 /// 读取经过编写的XML文件的所有内容
574
575 /// </summary>
576
577 /// <param name="xmlPath">文件路径</param>
578
579 /// <returns>表示内容的字符串</returns>
580
581 private string ReadXml(string xmlPath)
582
583 {
584
585 string xmlStr = string.Empty;
586
587 XmlTextReader xmlTxtRd = new XmlTextReader(xmlPath);
588
589
590
591 xmlTxtRd.MoveToContent();
592
593 xmlStr = xmlTxtRd.ReadOuterXml();
594
595
596
597 xmlTxtRd.Close();
598
599 return xmlStr;
600
601 }
602
603
604
605 private void button2_Click(object sender, System.EventArgs e)
606
607 {
608
609 this.textBox1.Text = string.Empty;
610
611 const string fileName = "WriteXml1.xml";
612
613
614
615 XmlTextWriter xmlTxtWt = new XmlTextWriter(fileName,Encoding.UTF8);
616
617
618
619 // 设置XML的输出格式,这里使用缩进
620
621 xmlTxtWt.Formatting = Formatting.Indented;
622
623 // 设置缩进的数量,这里是4个空格,IndentChar属性默认是空格
624
625 xmlTxtWt.Indentation = 4;
626
627
628
629 xmlTxtWt.WriteStartDocument();
630
631 xmlTxtWt.WriteStartElement("ct","ContactDetails","http://www.deltabis.com/Contact");
632
633 xmlTxtWt.WriteAttributeString("Date","20050121 14:00");
634
635 xmlTxtWt.WriteElementString("contact","abcd");
636
637 xmlTxtWt.WriteElementString("contact","efgh");
638
639 xmlTxtWt.WriteElementString("contact","ijkl");
640
641 xmlTxtWt.WriteElementString("contact","mnop");
642
643 xmlTxtWt.WriteEndElement();
644
645 xmlTxtWt.WriteEndDocument();
646
647
648
649 xmlTxtWt.Flush();
650
651 xmlTxtWt.Close();
652
653
654
655 this.textBox1.Text = ReadXml(fileName);
656
657 }
658
659
660
661 // 从读取器中复制节点及其内容
662
663 private void button3_Click(object sender, System.EventArgs e)
664
665 {
666
667 XmlTextReader xmlTxtRd = new XmlTextReader("唐诗.xml");
668
669 XmlTextWriter xmlTxtWt = new XmlTextWriter("WriteXml2.xml",Encoding.UTF8);
670
671
672
673 xmlTxtWt.Formatting = Formatting.Indented;
674
675 xmlTxtWt.Indentation = 4;
676
677 xmlTxtWt.WriteStartDocument();
678
679 xmlTxtWt.WriteComment("以下是从读取器中拷贝的节点");
680
681
682
683 try
684
685 {
686
687 while(xmlTxtRd.Read())
688
689 {
690
691 if (xmlTxtRd.NodeType == XmlNodeType.Element)
692
693 xmlTxtWt.WriteNode(xmlTxtRd,true);
694
695 }
696
697 }
698
699 catch(Exception exp)
700
701 {
702
703 MessageBox.Show(exp.ToString());
704
705 }
706
707 finally
708
709 {
710
711 xmlTxtWt.Flush();
712
713 xmlTxtWt.Close();
714
715 xmlTxtRd.Close();
716
717 }
718
719
720
721 this.textBox1.Text = ReadXml("WriteXml2.xml");
722
723 }
724
725
726
727 // 编写一份完整的XML
728
729 private void button4_Click(object sender, System.EventArgs e)
730
731 {
732
733 this.textBox1.Text = string.Empty;
734
735 string fileName = "WriteXml3.xml";
736
737
738
739 XmlTextWriter xmlTxtWt = new XmlTextWriter(fileName,Encoding.UTF8);
740
741
742
743 xmlTxtWt.Formatting = Formatting.Indented;
744
745 xmlTxtWt.Indentation = 4;
746
747
748
749 xmlTxtWt.WriteStartDocument();
750
751 xmlTxtWt.WriteStartElement("ct","ContactDetails","http://www.deltabis.com/Contact");
752
753 xmlTxtWt.WriteAttributeString("Date","20050121 16:00");
754
755 xmlTxtWt.WriteComment("This document contains contact information.");
756
757 xmlTxtWt.WriteStartElement("contact");
758
759 xmlTxtWt.WriteAttributeString("title",string.Empty);
760
761 xmlTxtWt.WriteStartElement("name");
762
763 xmlTxtWt.WriteElementString("firstname","Steven");
764
765 xmlTxtWt.WriteElementString("middle",string.Empty);
766
767 xmlTxtWt.WriteElementString("lastname","LivingStone-Perez");
768
769 xmlTxtWt.WriteFullEndElement();
770
771 xmlTxtWt.WriteFullEndElement();
772
773 xmlTxtWt.WriteFullEndElement();
774
775 xmlTxtWt.WriteEndDocument();
776
777
778
779 xmlTxtWt.Flush();
780
781 xmlTxtWt.Close();
782
783
784
785 this.textBox1.Text = ReadXml(fileName);
786
787 }
788
789
790
791 // 添加CDATA数据块
792
793 private void button5_Click(object sender, System.EventArgs e)
794
795 {
796
797 this.textBox1.Text = string.Empty;
798
799 string fileName = "WriteXml4.xml";
800
801
802
803 XmlTextWriter xmlTxtWt = new XmlTextWriter(fileName,Encoding.UTF8);
804
805
806
807 xmlTxtWt.Formatting = Formatting.Indented;
808
809 xmlTxtWt.Indentation = 4;
810
811
812
813 xmlTxtWt.WriteStartDocument();
814
815 xmlTxtWt.WriteStartElement("ct","ContactDetails","http://www.deltabis.com/Contact");
816
817 xmlTxtWt.WriteAttributeString("Date","20050121 16:00");
818
819 xmlTxtWt.WriteComment("This document contains contact information.");
820
821 xmlTxtWt.WriteStartElement("contact");
822
823 xmlTxtWt.WriteAttributeString("title",string.Empty);
824
825 xmlTxtWt.WriteStartElement("name");
826
827 xmlTxtWt.WriteElementString("firstname","Steven");
828
829 xmlTxtWt.WriteElementString("middle",string.Empty);
830
831 xmlTxtWt.WriteElementString("lastname","LivingStone-Perez");
832
833 xmlTxtWt.WriteFullEndElement();
834
835 xmlTxtWt.WriteStartElement("notes","http://www.deltabis.com/Contact"); // 该节点的命名空间与上面一样,该节点将使用上面的前缀
836
837 xmlTxtWt.WriteCData("<securityAlogrithm>88hshshhhdd8*^&@^*^#*&!%~~~(ghj*(**&%^){}^(*&7*(9$%###$@!");
838
839 xmlTxtWt.WriteEndElement();
840
841 xmlTxtWt.WriteFullEndElement();
842
843 xmlTxtWt.WriteFullEndElement();
844
845 xmlTxtWt.WriteEndDocument();
846
847
848
849 xmlTxtWt.Flush();
850
851 xmlTxtWt.Close();
852
853
854
855 this.textBox1.Text = ReadXml(fileName);
856
857 }
858
859
860
861 // 对图片进行编码,并写出
862
863 private void button6_Click(object sender, System.EventArgs e)
864
865 {
866
867 int readByte = 0;
868
869 int bytesToRead = 100;
870
871 string fileName = "WriteXml5.xml";
872
873 this.textBox1.Text = string.Empty;
874
875
876
877 // 打开图片文件,利用该图片构造一个文件流
878
879 FileStream fs = new FileStream(@"D:\03.jpg",FileMode.Open);
880
881 // 使用文件流构造一个二进制读取器将基元数据读作二进制值
882
883 BinaryReader br = new BinaryReader(fs);
884
885
886
887 XmlTextWriter xmlTxtWt = new XmlTextWriter(fileName,Encoding.UTF8);
888
889 xmlTxtWt.Formatting = Formatting.Indented;
890
891 xmlTxtWt.Indentation = 4;
892
893
894
895 xmlTxtWt.WriteStartDocument();
896
897 xmlTxtWt.WriteStartElement("ct","ContactDetails","http://www.deltabis.com/Contact");
898
899 xmlTxtWt.WriteStartElement("image");
900
901 xmlTxtWt.WriteAttributeString("imageName","03.jpg");
902
903
904
905 byte[] base64buffer = new byte[bytesToRead];
906
907 do
908
909 {
910
911 readByte = br.Read(base64buffer,0,bytesToRead); //将数据读入字节数组
912
913 xmlTxtWt.WriteBase64(base64buffer,0,readByte); //将数组中二进制值编码为Base64并写出到XML文件
914
915 }while(bytesToRead <= readByte);
916
917
918
919 xmlTxtWt.WriteEndElement();
920
921 xmlTxtWt.WriteEndElement();
922
923 xmlTxtWt.WriteEndDocument();
924
925
926
927 xmlTxtWt.Flush();
928
929 xmlTxtWt.Close();
930
931
932
933 this.textBox1.Text = ReadXml(fileName);
934
935 }
936
937
938
939 // 解码并生成图片
940
941 private void button7_Click(object sender, System.EventArgs e)
942
943 {
944
945 int readByte = 0;
946
947 int bytesToRead = 100;
948
949
950
951 XmlTextReader xmlTxtRd = new XmlTextReader("WriteXml5.xml");
952
953
954
955 FileStream fs = new FileStream("newimage.jpg",FileMode.Create);
956
957 BinaryWriter bw = new BinaryWriter(fs);
958
959
960
961 byte[] base64buffer = new byte[bytesToRead];
962
963
964
965 while(xmlTxtRd.Read())
966
967 {
968
969 if (xmlTxtRd.NodeType == XmlNodeType.Element && xmlTxtRd.Name == "image")
970
971 {
972
973 do
974
975 {
976
977 readByte = xmlTxtRd.ReadBase64(base64buffer,0,bytesToRead);
978
979 bw.Write(base64buffer,0,readByte);
980
981 }while(readByte <= bytesToRead);
982
983 }
984
985 }
986
987
988
989 bw.Flush();
990
991 bw.Close();
992
993 fs.Close();
994
995
996
997 xmlTxtRd.Close();
998
999 }
1000
1001 }
1002
1003 }