Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Licensed to the Apache Software Foundation (ASF) under one or more
   * contributor license agreements.  See the NOTICE file distributed with
   * this work for additional information regarding copyright ownership.
   * The ASF licenses this file to You under the Apache License, Version 2.0
   * (the "License"); you may not use this file except in compliance with
   * the License.  You may obtain a copy of the License at
   * 
   *      http://www.apache.org/licenses/LICENSE-2.0
  * 
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 package org.apache.catalina.util;
 
 import java.io.Writer;
 
A sample DOM writer. This sample program illustrates how to traverse a DOM tree in order to print a document that is parsed.
 
 public class DOMWriter {
 
    //
    // Data
    //
 
   
Default Encoding
 
    private static  String
    PRINTWRITER_ENCODING = "UTF8";
 
    private static String MIME2JAVA_ENCODINGS[] =
     { "Default""UTF-8""US-ASCII""ISO-8859-1""ISO-8859-2""ISO-8859-3""ISO-8859-4",
       "ISO-8859-5""ISO-8859-6""ISO-8859-7""ISO-8859-8""ISO-8859-9""ISO-2022-JP",
       "SHIFT_JIS""EUC-JP","GB2312""BIG5""EUC-KR""ISO-2022-KR""KOI8-R""EBCDIC-CP-US",
       "EBCDIC-CP-CA""EBCDIC-CP-NL""EBCDIC-CP-DK""EBCDIC-CP-NO""EBCDIC-CP-FI""EBCDIC-CP-SE",
       "EBCDIC-CP-IT""EBCDIC-CP-ES""EBCDIC-CP-GB""EBCDIC-CP-FR""EBCDIC-CP-AR1",
       "EBCDIC-CP-HE""EBCDIC-CP-CH""EBCDIC-CP-ROECE","EBCDIC-CP-YU",
       "EBCDIC-CP-IS""EBCDIC-CP-AR2""UTF-16"
     };

   
Output qualified names
 
    private boolean qualifiedNames = true;

   
Print writer.
 
    protected PrintWriter out;

   
Canonical output.
 
    protected boolean canonical;
 
 
    public DOMWriter(String encodingboolean canonical)
        = new PrintWriter(new OutputStreamWriter(.encoding));
       this. = canonical;
    } // <init>(String,boolean)
 
    //
    // Constructors
    //
 
   
Default constructor.
 
    public DOMWriter(boolean canonicalthrows UnsupportedEncodingException {
       thisgetWriterEncoding(), canonical);
    }
 
     public DOMWriter(Writer writerboolean canonical) {
          = new PrintWriter(writer);
         this. = canonical;
     }
 
    public boolean getQualifiedNames() {
       return this.;
    }
 
    public void setQualifiedNames(boolean qualifiedNames) {
       this. = qualifiedNames;
    }
 
    public static String getWriterEncoding( ) {
       return ();
    }// getWriterEncoding
 
    public static void  setWriterEncodingString encoding ) {
       ifencoding.equalsIgnoreCase"DEFAULT" ) )
            = "UTF8";
      else ifencoding.equalsIgnoreCase"UTF-16" ) )
           = "Unicode";
      else
          = MIME2Java.convertencoding );
   }// setWriterEncoding
   public static boolean isValidJavaEncodingString encoding ) {
      for ( int i = 0; i < .i++ )
         if ( encoding.equals[i] ) )
            return (true);
      return (false);
   }// isValidJavaEncoding


   
Prints the specified node, recursively.
   public void print(Node node) {
      // is there anything to do?
      if ( node == null ) {
         return;
      }
      int type = node.getNodeType();
      switch ( type ) {
         // print document
         case .: {
               if ( ! ) {
                  String  Encoding = getWriterEncoding();
                  ifEncoding.equalsIgnoreCase"DEFAULT" ) )
                     Encoding = "UTF-8";
                  else ifEncoding.equalsIgnoreCase"Unicode" ) )
                     Encoding = "UTF-16";
                  else
                     Encoding = MIME2Java.reverseEncoding );
                  .println("<?xml version=\"1.0\" encoding=\""+
                           Encoding + "\"?>");
               }
               print(((Document)node).getDocumentElement());
               .flush();
               break;
            }
            // print element with attributes
         case .: {
               .print('<');
               if (this.) { 
                  .print(node.getNodeName());
               } else {
                  .print(node.getLocalName());
               }
               Attr attrs[] = sortAttributes(node.getAttributes());
               for ( int i = 0; i < attrs.lengthi++ ) {
                  Attr attr = attrs[i];
                  .print(' ');
                  if (this.) {
                     .print(attr.getNodeName());
                  } else {
                     .print(attr.getLocalName());
                  }
                  
                  .print("=\"");
                  .print(normalize(attr.getNodeValue()));
                  .print('"');
               }
               .print('>');
               NodeList children = node.getChildNodes();
               if ( children != null ) {
                  int len = children.getLength();
                  for ( int i = 0; i < leni++ ) {
                     print(children.item(i));
                  }
               }
               break;
            }
            // handle entity reference nodes
         case .: {
               if (  ) {
                  NodeList children = node.getChildNodes();
                  if ( children != null ) {
                     int len = children.getLength();
                     for ( int i = 0; i < leni++ ) {
                        print(children.item(i));
                     }
                  }
               } else {
                  .print('&');
                  if (this.) {
                     .print(node.getNodeName());
                  } else {
                     .print(node.getLocalName());
                  }
                  .print(';');
               }
               break;
            }
            // print cdata sections
         case .: {
               if (  ) {
                  .print(normalize(node.getNodeValue()));
               } else {
                  .print("<![CDATA[");
                  .print(node.getNodeValue());
                  .print("]]>");
               }
               break;
            }
            // print text
         case .: {
               .print(normalize(node.getNodeValue()));
               break;
            }
            // print processing instruction
         case .: {
               .print("<?");
               if (this.) {
                  .print(node.getNodeName());
               } else {
                  .print(node.getLocalName());
               }
               
               String data = node.getNodeValue();
               if ( data != null && data.length() > 0 ) {
                  .print(' ');
                  .print(data);
               }
               .print("?>");
               break;
            }
      }
      if ( type == . ) {
         .print("</");
         if (this.) {
            .print(node.getNodeName());
         } else {
            .print(node.getLocalName());
         }
         .print('>');
      }
      .flush();
   } // print(Node)

   
Returns a sorted list of attributes.
   protected Attr[] sortAttributes(NamedNodeMap attrs) {
      int len = (attrs != null) ? attrs.getLength() : 0;
      Attr array[] = new Attr[len];
      for ( int i = 0; i < leni++ ) {
         array[i] = (Attr)attrs.item(i);
      }
      for ( int i = 0; i < len - 1; i++ ) {
         String name = null;
         if (this.) {
            name  = array[i].getNodeName();
         } else {
            name  = array[i].getLocalName();
         }
         int    index = i;
         for ( int j = i + 1; j < lenj++ ) {
            String curName = null;
            if (this.) {
               curName = array[j].getNodeName();
            } else {
               curName = array[j].getLocalName();
            }
            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);
   } // sortAttributes(NamedNodeMap):Attr[]


   
Normalizes the given string.
   protected String normalize(String s) {
      StringBuilder str = new StringBuilder();
      int len = (s != null) ? s.length() : 0;
      for ( int i = 0; i < leni++ ) {
         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;
               }
            case '\r':
            case '\n': {
                  if (  ) {
                     str.append("&#");
                     str.append(Integer.toString(ch));
                     str.append(';');
                     break;
                  }
                  // else, default append char
               }
            default: {
                  str.append(ch);
               }
         }
      }
      return (str.toString());
   } // normalize(String):String
   private static void printValidJavaEncoding() {
      ..println"    ENCODINGS:" );
      ..print"   " );
      forint i = 0;
                     i < .i++) {
         ..print[i] + " " );
      if( (i % 7 ) == 0 ){
         ..println();
         ..print"   " );
         }
      }
   } // printJavaEncoding()
New to GrepCode? Check out our FAQ X