网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.抽象类(abstractclass)和接口(.
.Java技术与XML常见问题之JAXB.
.java开发工具(JCreator,jbuilder.
..NET的“无触式”配置:一个新的.
.运用BitSet类来处理一系列选项.
.IBMJava如何做到高性能GC的实现内.
.查询分页与CheckBox全选提交.
.Java Mail API及其应用 —— 一个.
.Javadoc 利弊分析.
.Java:咖啡的香气飘满互联网.
.osworkflow 小培训(1).
.用JFace和SWT构建简单的应用程序.
.地图的设计与绘制.
.设计模式的原则.
.Java技巧:步入本地方法圣殿的七.
.Jini 和 PvC.
.在Weblogic Portal里加入Struts的.
.面向对象思想之--限制对象属性的.
.关于Eclipse工作台中的Preference.
.把java类变成Windows NT服务的3中.

Java 与 XML 结合使用的心得体会(三)

发表日期:2008-1-5



  XMLBuilder.class 主要是把指定的document.node对象转换成规范的xml字符串。用的是ibm的xml4j解析器.代码如下:
  
  package com.ceic.workflow.xml;
  import Java.io.OutputStreamWriter;
  import java.io.PrintWriter;
  import java.io.UnsupportedEncodingException;
  import org.w3c.dom.Attr;
  import org.w3c.dom.document.
  import org.w3c.dom.Element;
  import org.w3c.dom.NamedNodeMap;
  import org.w3c.dom.Node;
  import org.w3c.dom.NodeList;
  import com.ibm.xml.parsers.*;
  
  /**
   * Title:    有效XML 字符串生成工具
   * Description: 有效XML 字符串生成工具
   * Copyright:  Copyright (c) 2003
   * Company:   国电信息中心
   * @author 张治中
   * @version 1.0
   * 有效XML 字符串生成工具
   * 例如:
   * XmlBuilder build=new XmlBuilder();
   * document.nbspdoc=((document.Class.forName("com.ibm.xml.
   * dom.document.mpl").newInstance())
   * ..........
   * build.printDOMTree(doc);
   * String xmlString=build.getXmlResult();
   * 再把xmlString用XmlOutput类去输出成xml文件.
   */
  public class XmlBuilder
  {
  private String lineSeparator="\r";
  private String xmlString="";
  private int indentLevel=0;
  protected static String STANDARD_INDENT=" ";
  private String XmlHeader="<?xml version=\"1.0\" ?>";
  private int currentlevel=0;
   /**
    * 生成XML字符串.
    * @param node 要生成字符串的document.其它Node.
    */
   public void printDOMTree(Node node){
   printDOMTree(node,indentLevel,false);
   }
  
   /**
    * 生成XML字符串.
    * @param node 要生成字符串的document.其它Node.
    * @param noTop 是否去除头尾,假如为document.象去掉<?xml.../?>头
    */
   public void printDOMTree(Node node,boolean noTop){
      printDOMTree(node,indentLevel,noTop);
   }
   /**
    * 生成XML字符串.
    * @param node 要生成字符串的document.其它Node.
    * @param level 节点的深度.(中间变量)
    * @param noTop 是否去除头尾,假如为document.象去掉<?xml.../?>头
    */
   private void printDOMTree(Node node,int level,boolean noTop)
   {
    int templevel=level;
    int find=0;
    short toptype=0;
    String topvalue="";
    int type = node.getNodeType();
    switch (type)
    {
     // print the document.nbspelement
     case Node.document.NODE:
     {
      find++;
      if(!noTopfind>1){
      xmlString+=XmlHeader+lineSeparator;
      }else{
       toptype=Node.document.NODE;
      }
      printDOMTree(((document.node).getdocument.lement(),
   templevel+1,false);
      break;
     }
  
     // print element with attributes
     case Node.ELEMENT_NODE:
     { find++;
  
     if(!noTopfind>1){
      currentlevel=templevel;
      xmlString+=printIndent(templevel);
      xmlString+=lineSeparator+"<";
      xmlString+=node.getNodeName();
      NamedNodeMap attrs = node.getAttributes();
      for (int i = 0; i < attrs.getLength(); i++)
      {
       Node attr = attrs.item(i);
       xmlString+=" " + attr.getNodeName() +"=\"" +
    attr.getNodevalue() +"\"";
      }
      xmlString+=">"+lineSeparator;
     }
     else{
      toptype=Node.ELEMENT_NODE
      topvalue="</"+node.getNodeName()+">"+lineSeparator;
      }
      NodeList children = node.getChildNodes();
      if (children != null)
     {
       int len = children.getLength();
       for (int i = 0; i < len; i++)
        printDOMTree(children.item(i),templevel+1,false);
     }
  
      break;
     }
  
     // handle entity reference nodes
     case Node.ENTITY_REFERENCE_NODE:
     {
      find++;
      xmlString+="&";
      xmlString+=node.getNodeName();
      xmlString+=";";
      break;
     }
  
     // print cdata sections
     case Node.CDATA_SECTION_NODE:
     {
      find++;
      xmlString+="<![CDATA[";
      xmlString+=node.getNodevalue();
      xmlString+="]]>";
      break;
     }
  
     // print text
     case Node.TEXT_NODE:
     {
       find++;
  //    String temp=node.getNodevalue();
  //    if(!temp.equals(" ")&&!temp.equals("\n")
  //     &&!temp.equals("\r"))
       xmlString+=node.getNodevalue();
      break;
     }
  
     // print processing instrUCtion
     case Node.PROCESSING_INSTRUCTION_NODE:
     {
      find++;
      xmlString+="<?";
      xmlString+=node.getNodeName();
      String data = node.getNodevalue();
      {
       xmlString+=" ";
       xmlString+=data;
      }
      xmlString+="?>";
      break;
     }
    }
  
    if (type == Node.ELEMENT_NODE)
    {
     find++;
     if(currentlevel!=templevel){
       xmlString+=printIndent(templevel);
       xmlString+=lineSeparator;
     }
     xmlString+="</";
     xmlString+=node.getNodeName();
     xmlString+=">"+lineSeparator;
    }
    if(noTop&&toptype==Node.ELEMENT_NODE){
     int len=xmlString.length()
     int tlen=topvalue.length()
     xmlString=xmlString.substring(0,len-tlen);
    }
   }
  /**
  * 生成行前的STANDARD_INDENT(一般指空格)
  * @param num STANDARD_INDENT的个数
  * @return String
  */
  private String printIndent(int num){
   String temp="";
   if(num>0){
   for(int i=0;i<num;i++){
    temp+=STANDARD_INDENT;
   }
   }
   return temp;
  }
  /**
  * 设定行前的STANDARD_INDENT(一般指空格)
  * @param indent STANDARD_INDENT的值
  */
  public void setIndent(String indent){
   STANDARD_INDENT=indent;
  }
  /**
  * 获得已经生成的xml字符串.在printDOMTree(Node node)方法后有效
  * @return String
  */
  public String getXmlResult(){
   return xmlString;
  }
  /**
  * 设定最开始的深度级别(直接影响行前的STANDARD_INDENT(空格)数)
  * @param level 级别数
  */
  public void setBeginLevel(int level){
   indentLevel=level;
  }
  /**
  * 设定xml文件的xml头
  * @param header xml文件xml头。例如:<?xml version=\"1.0\" ?>
  */
  public void setXmlHeader(String header){
   XmlHeader=header;
  }
  /**
  * 设定换行符 默认为"\r\n"
  * @param lineseparator 换行分割符,默认为"\r\n"
  */
  public void setlineSeparator(String lineseparator){
   lineSeparator=lineseparator;
  }
  }
  
  
  
    XMLOutput.class 功能是用指定的string或InputStream生成文件(不一定是xml文件)。代码如下:
  
  package com.ceic.workflow.xml
  import org.w3c.dom.*;
  import java.io.*;
  import java.util.*;
  /**
   * Title:    有效XML 字符串生成xml文件的工具
   * Description: 有效XML 字符串生成xml文件的工具
   * Copyright:  Copyright (c) 2003
   * Company:   国电信息中心
   * @author 张治中
   * @version 1.0
   */
  public class XmlOutput{
  private String objectpath;
  pri
上一篇:Java 与 XML 结合使用的心得体会(二) 人气:638
下一篇:如何轻松实现JavaBeans到XML的相互转换 人气:607
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐