Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 1&1 Internet AG, http://www.1and1.org
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU Lesser General Public License as published by
   * the Free Software Foundation; either version 2 of the License,
   * or (at your option) any later version.
   *
   * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  * See the GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 package net.sf.beezle.sushi.xml;
 
 
 
 public class Serializer {
     private final Transformer transformer;
 
     public Serializer() {
         this. = createPrettyPrinter();
     }
    
    
Generates an xml/encoding declaration
 
     public void serialize(Node srcnet.sf.beezle.sushi.fs.Node destthrows IOException {
         OutputStream out;
         
         // don't use Writer to allow transformer to decide about encoding */
         out = dest.createOutputStream();
         serialize(new DOMSource(src), new StreamResult(out), dest.getWorld().getSettings().);
         out.close();
     }
 
     public void serialize(Node srcResult destthrows IOException {
         serialize(new DOMSource(src), dest);
     }
     
     public void serialize(Source srcResult destthrows IOException {
         serialize(srcdestnull);
     }
 
     public void serialize(Source srcResult destString encodingthrows IOException {
         Throwable cause;
         
         if (encoding == null) {
             .setOutputProperty(."yes");            
         } else {
             .setOutputProperty(."no");            
             .setOutputProperty(.encoding);            
         }
         try {
             .transform(srcdest);
         } catch (TransformerException orig) {
             Throwable last;
 
             last = orig;
             while (true) {
                 if (last instanceof SAXException) {
                     cause = ((SAXExceptionlast).getException();
                 } else {
                     cause = last.getCause();
                 }
                 if (cause instanceof IOException) {
                     throw (IOExceptioncause;
                 } else if (cause == null) {
                     break;
                 } else {
                     last = cause;
                 }
             }
             throw new RuntimeException("unexpected problem with identity transformer"orig);
         }
     }
 
    //-- to strings

    
does not genereate encoding headers
    public String serialize(Node node) {
        Result result;
        StringWriter dest;
        if (node == null) {
            throw new IllegalArgumentException();
        }
        dest = new StringWriter();
        result = new StreamResult(dest);
        try {
            serialize(noderesult);
        } catch (IOException e) {
            throw new IllegalStateException(e);
        }
        return dest.getBuffer().toString();
    }
    public String serializeChildren(Document doc) {
        return serializeChildren(doc.getDocumentElement());
    }
    
    public String serializeChildren(Element element) {
        String str;
        String prefix;
        String suffix;
        String root;
        
        root = element.getTagName();
        str = serialize(element).trim();
        prefix = "<" + root + ">"
        suffix = "</" + root + ">"
        if (!str.startsWith(prefix) || !str.endsWith(suffix)) {
            if (str.equals("<" + root + "/>")) {
                return "";
            } 
            throw new IllegalStateException(str);
        }
        return str.substring(prefix.length(), str.length() - suffix.length()).trim();
    }
    //--
    
    
Same method used for attributes and elements ... See http://www.w3.org/TR/REC-xml/#charsets
    public static String escapeEntities(String strboolean strict) {
        StringBuilder buffer;
        char ch;
        String msg;
        String entity;
        buffer = null;
        for (int i = 0; i < str.length(); i++) {
            ch = str.charAt(i);
            switch (ch) {
                case '\t':
                case '\n':
                case '\r':
                    entity = null;
                    break;
                case '<' :
                    entity = "&lt;";
                    break;
                case '>' :
                    entity = "&gt;";
                    break;
                case '\'' :
                    entity = "&apos;";
                    break;
                case '\"' :
                    entity = "&quot;";
                    break;
                case '&' :
                    entity = "&amp;";
                    break;
                default :
                    if (ch < 32) {
                        msg = "illegal character code " + (intch;
                        if (strict) {
                            throw new IllegalArgumentException(msg);
                        }
                        entity = "[" + msg + "]";
                    } else if (ch < 127) {
                        entity = null;
                    } else {
                        entity = "&#" + (intch + ";";
                    }
                    break;
            }
            if (buffer == null) {
                if (entity != null) {
                    buffer = new StringBuilder(str.length() + 5);
                    buffer.append(str.substring(0, i));
                    buffer.append(entity);
                }
            } else {
                if (entity == null) {
                    buffer.append(ch);
                } else {
                    buffer.append(entity);
                }
            }
        }
        return buffer == null ? str : buffer.toString();
    }
    
    //--
    // pretty-print script by M. Kay, see
    // http://www.cafeconleche.org/books/xmljava/chapters/ch17s02.html#d0e32721
    private static final String ID =
        "<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>" +
        "  <xsl:output method='xml' indent='yes'/>" +
        "  <xsl:strip-space elements='*'/>" +
        "  <xsl:template match='/'>" +
        "    <xsl:copy-of select='.'/>" +
        "  </xsl:template>" +
        "</xsl:stylesheet>";
    private static final Templates TEMPLATES;
    
    static {
        Source src;
        src = new SAXSource(new InputSource(new StringReader()));
        try {
             = templates(src);
        } catch (TransformerConfigurationException e) {
            throw new RuntimeException(e);
        }
    }
    public static Templates templates(Source srcthrows TransformerConfigurationException {
        // CAUTION: Always use Jre's xalan because Saxon 6.5.x fails in serializeChildren 
    }
    
    private static synchronized Transformer createPrettyPrinter() {
        Transformer result;
        try {
            result = .newTransformer();
        } catch (TransformerConfigurationException e) {
            throw new RuntimeException(e);
        }
        result.setOutputProperty(."yes");
        result.setOutputProperty("{http://xml.apache.org/xslt}indent-amount""2");
        // TODO: ignored by both jdk 1.4 and 1.5's xalan (honored by Saxon)
        result.setOutputProperty(."yes");  
        return result;
    }
New to GrepCode? Check out our FAQ X