看一段代码:=============================================
package cn.com.throughout.ecm_view.xml_serializer;/**
 * @author zhang jiarui
 **/import java.io.*;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentType;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;public class DOMSerializer { private String indent;      // 缩进的标志
 private String lineSeparator;    // 换行的标志
 
 public DOMSerializer() {
  indent = " ";
  lineSeparator = "\n";
 }
 
 public void setLineSeparator(String lineSeparator) {
  this.lineSeparator = lineSeparator;
 }
 // 以下重组的方法,用到递归责任链模式
 public void serialize(Document doc, OutputStream out) 
  throws IOException {
  
  Writer writer = new OutputStreamWriter(out);
  serialize(doc, writer);
 }
 
 public void serialize(Document doc, File file) 
  throws IOException {
  
  Writer writer = new FileWriter(file);
  serialize(doc, writer);
 }
 
 public void serialize(Document doc, Writer writer)
  throws IOException {
   
  serializeNode(doc, writer, "");
  writer.flush();
 }
 
 public void serializeNode(Node node, Writer writer, String indentLevel) 
  throws IOException {
   
  // 按节点类型确定操作
  switch(node.getNodeType()) {
   
   case Node.DOCUMENT_NODE:
    writer.write("<?xml version=\"1.0\" encoding=\"gb2312\" ?>");
    writer.write(lineSeparator);
    
    Document doc = (Document)node;
    serializeNode(doc.getDocumentElement(), writer, "");    //得到根节点
    break;
   
   case Node.ELEMENT_NODE:
    String name = node.getNodeName();
    writer.write(indentLevel + "<" + name);
    NamedNodeMap attributes = node.getAttributes();
    for(int i=0; i<attributes.getLength(); i++) {
     Node current = attributes.item(i);
     String value = current.getNodevalue().replaceAll("&","&amp;");
     writer.write(" " + current.getNodeName() +
      " = \"" + value + "\"");
     
    }
    writer.write(">");
    // 以下遍历所有子节点
    NodeList children = node.getChildNodes();
    if(children != null) {
     if(children.item(0) != null &&
      (children.item(0).getNodeType() == Node.ELEMENT_NODE)) {
       writer.write(lineSeparator);
     }
     for(int i=0; i<children.getLength(); i++) {
      serializeNode(children.item(i), writer, indentLevel + indent);
     }
     if((children.item(0) != null) &&
      (children.item(children.getLength()-1).getNodeType()==Node.ELEMENT_NODE)) {
       writer.write(lineSeparator);
     }
    }
    writer.write(indentLevel + "</" + name + ">");
    writer.write(lineSeparator);
    break;
    
   case Node.TEXT_NODE:
    String value = node.getNodevalue().replaceAll("&","&amp;");
    value = value.replaceAll("<","&lt;");
    value = value.replaceAll(">","&gt;");
    writer.write(value);
    break;
    
   case Node.CDATA_SECTION_NODE:
    writer.write("<![CDATA[" + node.getNodevalue() + "]]>");
    writer.write(lineSeparator);
    break;
    
   case Node.COMMENT_NODE:
    writer.write(indentLevel + "<!-- " + node.getNodevalue() + " -->");
    writer.write(lineSeparator);
    break;
    
   case Node.PROCESSING_INSTRUCTION_NODE:
    writer.write("<?" + node.getNodeName() + 
       " " + node.getNodevalue() + "?>");
    writer.write(lineSeparator);
    break;
    
   case Node.DOCUMENT_TYPE_NODE:
    DocumentType docType = (DocumentType)node;
    writer.write("<!DOCTYPE " + docType.getName());
    if(docType.getPublicId() != null) {
     System.out.println(" PUBLIC \"" + docType.getPublicId() + "\" ");
    }
    else {
     writer.write(" SYSTEM ");
    }
    writer.write("\"" + docType.getSystemId() + "\">");
    writer.write(lineSeparator);
    break;
   
   case Node.ENTITY_REFERENCE_NODE:
    writer.write("&" + node.getNodeName() + ";");
    break;
  }
 }
}
生成XML的必要类写法
=============================================

解决方案 »

  1.   

    输出XML文件的类:
    import java.io.*;
    import org.w3c.dom.Document;
    import cn.com.throughout.ecm_view.xml_serializer.DOMSerializer;import org.apache.xerces.parsers.DOMParser;
    /**
     * @author zhang jiarui
     *
     */
    public class Main_Serializer {
     
     public void HPSerializer(Document xmlDocument, String outputXMLFileName) 
      throws Exception {
      
      File outputFile = new File(outputXMLFileName);
      DOMParser parser = new DOMParser();
      
      // 串行化代码
      DOMSerializer serializer = new DOMSerializer();
      serializer.serialize(xmlDocument, outputFile);
     }
    }
      

  2.   

    还有这篇文章不错:http://www.oracle.com/global/cn/oramag/oracle/03-sep/o53devxml.html
      

  3.   

    太谢谢了我都不知道有还要这么复杂,要自己做个写操作的类:( 
    DOM没有提供这个吗:(
    能不能就用你的类呀:) 总之,谢谢了