TransformerFactory tFactory =
TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(System.out);
transformer.transform(source, result);

解决方案 »

  1.   

    用NamedNodeMap取值,遍历给String
      

  2.   

    非常感谢上面二位。
    to:雨泉
    我没有怎么看明白您的代码,(很惭愧,我对这些类不熟悉)。
    我的理解是:通过transformer把source的内容转给result我把result赋值给了一个session变量xmlstr,然后显示出来的结果是:
    javax.xml.transform.stream.StreamResult@e0fcac
    而我的源document里却明明是一个xml格式的类,很迷糊,请教雨泉和大家!还有StreamResult result = new StreamResult(System.out);我也不明白,是将结果输出到系统标准输出吗?那如果我只是想把它存到字符串里呢?
      

  3.   

    jdom里有实现,其他很多这类的项目里都有实现.在
    XmlWriter.java里 :
    // XmlWriter.java
    //
    /*****************************************************************************
     * Copyright (C) CSIRO Mathematical and Information Sciences.                *
     * All rights reserved.                                                      *
     * ------------------------------------------------------------------------- *
     * This software is published under the terms of the CSIRO Software License  *
     * version 1.0, a copy of which has been included with this distribution in  *
     * the LICENSE file.                                                         *
     *****************************************************************************/
    //
    // $Id: XmlWriter.java,v 1.7 2000/11/22 05:00:17 bella Exp $
    //
     
    package org.csiro.svg.parser;import java.io.OutputStream;
    import java.io.PrintWriter;import org.w3c.dom.Attr;
    import org.w3c.dom.Document;
    import org.w3c.dom.NamedNodeMap;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;/**
     * The XmlWriter class writes XML to an outputstream.
     */
    public class XmlWriter {  PrintWriter out;  /**
       * Creates an XmlWriter.
       * @param outputStream The stream to write to.
       */
      public XmlWriter(OutputStream outputStream) {
        out = new PrintWriter(outputStream);
      }  /**
       * Prints the specified node
       * @param node The node to print. This function is recursive.
       */
      public void print(Node node) {
        print(node, null, 0);
      }  public void print(Node node, String docTypeString) {
        print(node, docTypeString, 0);
      }  public void print(Node node, int indent) {
        print(node, null, indent);
      }  /**
       * Prints the specified node. This function is recursive.
       * @param node The node to print.
       * @param docTypeString The string that should be used for the DOCTYPE line
       *                      in the xml header. This will only be looked at if
       *                      node is the DOCUMENT_NODE.
       */
      public void print(Node node, String docTypeString, int indent) {    // is there anything to do?
        if ( node == null ) {
          return;
        }    String indentString = "";
        for (int j = 0; j < indent; j++) {
          indentString += " ";
        }    int type = node.getNodeType();
        switch ( type ) {      // print document
          case Node.DOCUMENT_NODE: {
            out.println("<?xml version=\"1.0\" standalone=\"no\" ?>");
            if (docTypeString != null) {
              out.println(docTypeString);
            }
            print(((Document)node).getDocumentElement(), 0);
            out.flush();
            break;
          }      // print element with attributes
          case Node.ELEMENT_NODE: {
            out.print(indentString + "<");
            out.print(node.getNodeName());
            Attr attrs[] = sortAttributes(node.getAttributes());
            for ( int i = 0; i < attrs.length; i++ ) {
              Attr attr = attrs[i];
              if (attr.getNodeValue().length() > 0) {
                out.print(' ');
                out.print(attr.getNodeName());
                out.print("=\"");
                out.print(normalize(attr.getNodeValue()));
                out.print('"');
              }
            }
            out.println('>');
            NodeList children = node.getChildNodes();
            if ( children != null ) {
              int len = children.getLength();
              for ( int i = 0; i < len; i++ ) {
                print(children.item(i), indent+2);
              }
            }
            break;
          }      // handle entity reference nodes
          case Node.ENTITY_REFERENCE_NODE: {
            out.print('&');
            out.print(node.getNodeName());
            out.print(';');
            break;
          }      // print cdata sections
          case Node.CDATA_SECTION_NODE: {
            out.print(indentString + "<![CDATA[");
            out.print(node.getNodeValue());
            out.println("]]>");
            break;
          }      // print text
          case Node.TEXT_NODE: {
            if (node.getNodeValue().trim().length() > 0) {
              out.println(indentString + normalize(node.getNodeValue()));
            }
            break;
          }      // print processing instruction
          case Node.PROCESSING_INSTRUCTION_NODE: {
            out.print(indentString + "<?");
            out.print(node.getNodeName());
            String data = node.getNodeValue();
            if ( data != null && data.length() > 0 ) {
              out.print(' ');
              out.print(data);
            }
            out.println("?>");
            break;
          }
        }    if ( type == Node.ELEMENT_NODE ) {
          out.print(indentString + "</");
          out.print(node.getNodeName());
          out.println('>');
        }
        out.flush();
      }  /**
       * Returns a sorted array of attributes.
       * @return A sorted array of attributes.
       */
      protected Attr[] sortAttributes(NamedNodeMap attrs) {
        int len = (attrs != null) ? attrs.getLength() : 0;
        Attr array[] = new Attr[len];
        for (int i = 0; i < len; i++) {
          array[i] = (Attr)attrs.item(i);
        }
        for (int i = 0; i < len - 1; i++) {
          String name  = array[i].getNodeName();
          int index = i;
          for ( int j = i + 1; j < len; j++ ) {
            String curName = array[j].getNodeName();
            if ( curName.compareTo(name) < 0 ) {
              name = curName;
              index = j;
            }
          }
          if (index != i) {
            Attr temp = array[i];
            array[i] = array[index];
            array[index] = temp;
          }
        }
        return (array);
      }  /**
       * Normalizes the given string.
       * @param s The string to normalize.
       * @return The normalized string.
       */
      protected String normalize(String s) {
        StringBuffer str = new StringBuffer();
        int len = (s != null) ? s.length() : 0;
        for ( int i = 0; i < len; i++ ) {
          char ch = s.charAt(i);
          switch ( ch ) {
            case '<': {
              str.append("&lt;");
              break;
            }
            case '>': {
              str.append("&gt;");
              break;
            }
            case '&': {
              str.append("&amp;");
              break;
            }
            case '"': {
              str.append("&quot;");
              break;
            }
            default: {
              str.append(ch);
            }
          }
        }
        return (str.toString());
      }
    } ------------------------------------------------------
               我们还年轻牛奶会有的奶牛也会有的 
                 可天天在 csdn 混这些会有吗 ??
      

  4.   

    呵呵,刚才那个是svgtookit里的.
    jdom里是 XMLOutputter.java
    你自己看源码吧 ------------------------------------------------------
               我们还年轻牛奶会有的奶牛也会有的 
                 可天天在 csdn 混这些会有吗 ??
      

  5.   

    呵呵,刚才那个是svgtookit里的.
    jdom里是 XMLOutputter.java
    你自己看源码吧 ------------------------------------------------------
               我们还年轻牛奶会有的奶牛也会有的 
                 可天天在 csdn 混这些会有吗 ??
      

  6.   

    呵呵,刚才那个是svgtookit里的.
    jdom里是 XMLOutputter.java
    你自己看源码吧 ------------------------------------------------------
               我们还年轻牛奶会有的奶牛也会有的 
                 可天天在 csdn 混这些会有吗 ??