选择显示字体大小

.net framework轻松处理xml数据(6)

     读写流
  
  有趣的是,reader(阅读器)和writer类提供了基于base64 和binhex编码的读写数据流的方法。writebase64 和 writebinhex方法的功能与其它的写方法的功能存在着细微的差别。它们都是基于流的,这两个方法的功能像一个byte数组而不是一个string。下面的代码首先把一个string转换成一个byte数组,然后把它们写成一个base64 编码流。encoding类的getbytes静态方法完成转换的任务:
  
  writer.writebase64(
  
  encoding.unicode.getbytes(buf),
  
  0, buf.length*2);
  图八中代码演示了把一个string数据转换为base64 编码的xml流。图九是输出的结果。
  
  
  figure 8 persisting a string array as base64
  
  using system;
  
  using system.text;
  
  using system.io;
  
  using system.xml;
  
  
  
  class mybase64array
  
  {
  
  public static void main(string[] args)
  
  {
  
  string outputfilename = "test64.xml";
  
  if (args.length > 0)
  
  outputfilename = args[0]; // file name
  
  
  
  // 把数组转换成xml
  
  string[] thearray = {"rome", "new york", "sydney", "stockholm",
  
  "paris"};
  
  
  
  createoutput(thearray, outputfilename);
  
  return;
  
  }
  
  
  
  private static void createoutput(string[] thearray, string filename)
  
  {
  
  // 打开xml writer
  
  xmltextwriter xmlw = new xmltextwriter(filename, null);
  
  //使子元素根据 indentation 和 indentchar 设置缩进。此选项只对元素内容进行缩进
  
  xmlw.formatting = formatting.indented;
  
  //书写版本为“1.0”的 xml 声明
  
  xmlw.writestartdocument();
  
  //写出包含指定文本的注释 。
  
  xmlw.writecomment("array to base64 xml");
  
  //开始写出array节点
  
  xmlw.writestartelement("array");
  
  //写出具有指定的前缀、本地名称、命名空间 uri 和值的属性
  
  xmlw.writeattributestring("xmlns", "x", null, "dinoe:msdn-mag");
  
  // 循环的写入array的子节点
  
  foreach(string s in thearray)
  
  {
  
  //写出指定的开始标记并将其与给定的命名空间和前缀关联起来
  
  xmlw.writestartelement("x", "element", null);
  
  //把s转换成byte[]数组, 并把byte[]数组编码为 base64 并写出结果文本,要写入的字节数为s总长度的2倍,一个string占的字节数是2字节。
  
  xmlw.writebase64(encoding.unicode.getbytes(s), 0, s.length*2);
  
  //关闭子节点
  
  xmlw.writeendelement();
  
  }
  
  //关闭根节点,只有两级
  
  xmlw.writeenddocument();
  
  
  
  // 关闭writer
  
  xmlw.close();
  
  
  
  // 读出写入的内容
  
  xmltextreader reader = new xmltextreader(filname);
  
  while(reader.read())
  
  {
  
  //获取节点名为element的节点
  
  if (reader.localname == "element")
  
  {
  
  
  
  byte[] bytes = new byte[1000];
  
  int n = reader.readbase64(bytes, 0, 1000);
  
  string buf = encoding.unicode.getstring(bytes);
  
  
  
  console.writeline(buf.substring(0,n));
  
  }
  
  }
  
  reader.close();
  
  
  
  }
  
  }
  figure 9 string array in inte.net explorer
  
  reader类有专门的解释base64和binhex编码流的方法。下面的代码片断演示了怎么样用xmltextreader类的readbase64方法解析用base64和binhex编码集创建的文档。
  
  xmltextreader reader = new xmltextreader(filename);
  
  while(reader.read()) {
  
  if (reader.localname == "element") {
  
  byte[] bytes = new byte[1000];
  
  int n = reader.readbase64(bytes, 0, 1000);
  
  string buf = encoding.unicode.getstring(bytes);
  
  console.writeline(buf.substring(0,n));
  
  }
  
  }
  
  reader.close();
  
  从byte型转换成string型是通过encoding类的getstring方法实现的。尽管我只介绍了基于base64编码集的代码,但是可以简单的用binhex替换方法名就可以实现读基于binhex编码的节点内容(用readbinhex方法)。这个技巧也可以用于读任何用byte数据形式表示的二进制数据,尤其是image类型的数据。
  
    


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons