eu.cdevreeze.yaidom.print

DocumentPrinterUsingDom

final class DocumentPrinterUsingDom extends AbstractDocumentPrinter

DOM-based Document printer.

It may be the case that the DocumentPrinter does not indent. See bug http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6296446. This problem appears especially when creating a Document from scratch, using NodeBuilders. A possible (implementation-specific!) workaround is to create the DocumentPrinter as follows:

val documentBuilderFactory: DocumentBuilderFactory = DocumentBuilderFactory.newInstance

val transformerFactory: TransformerFactory = TransformerFactory.newInstance
transformerFactory.setAttribute("indent-number", java.lang.Integer.valueOf(2))

val documentPrinter = DocumentPrinterUsingDom.newInstance(documentBuilderFactory, transformerFactory)

If more flexibility is needed in configuring the DocumentPrinter than offered by this class, consider writing a wrapper DocumentPrinter which wraps a DocumentPrinterUsingDom, but adapts the print method. This would make it possible to adapt the conversion from a yaidom Document to DOM Document, for example.

A DocumentPrinterUsingDom instance can be re-used multiple times, from the same thread. If the DocumentBuilderFactory and TransformerFactory are thread-safe, it can even be re-used from multiple threads. Typically a DocumentBuilderFactory or TransformerFactory cannot be trusted to be thread-safe, however. In a web application, one (safe) way to deal with that is to use one DocumentBuilderFactory and TransformerFactory instance per request.

Notes on HTML

In order to serialize a yaidom Document as HTML (which could have been parsed using the TagSoup library), a "transformer creator" can be coded as follows:

val trCreator = { (tf: TransformerFactory) =>
  val t = tf.newTransformer
  t.setOutputProperty(OutputKeys.METHOD, "html")
  t
}

This "transformer creator" is then passed as one of the arguments during DocumentPrinter construction.

Using such a DocumentPrinter configured for "HTML serialization", the serialized HTML is hopefully better understood by browsers than would have been the case with a DocumentPrinter configured for "XML serialization". For example, script tags (with empty content) are typically not written as self-closing tags in the first case, whereas they are in the second case.

If a DocumentPrinter is not explicitly configured for either "HTML or XML serialization", it may still be the case that HTML is serialized as HTML, depending on the TrAX implementation. Yet it is likely that in that case other elements than the document element would be serialized as XML instead of HTML. After all, (immutable) yaidom elements do not know about their ancestry.

Linear Supertypes
Ordering
  1. Alphabetic
  2. By inheritance
Inherited
  1. DocumentPrinterUsingDom
  2. AbstractDocumentPrinter
  3. DocumentPrinter
  4. AnyRef
  5. Any
  1. Hide All
  2. Show all
Learn more about member selection
Visibility
  1. Public
  2. All

Instance Constructors

  1. new DocumentPrinterUsingDom(docBuilderFactory: DocumentBuilderFactory, docBuilderCreator: (DocumentBuilderFactory) ⇒ DocumentBuilder, transformerFactory: TransformerFactory, transformerCreator: (TransformerFactory) ⇒ Transformer)

Value Members

  1. final def !=(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  2. final def ##(): Int

    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0

    Definition Classes
    Any
  5. def clone(): AnyRef

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  6. val docBuilderCreator: (DocumentBuilderFactory) ⇒ DocumentBuilder

  7. val docBuilderFactory: DocumentBuilderFactory

  8. final def eq(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  9. def equals(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  10. def finalize(): Unit

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  11. final def getClass(): Class[_]

    Definition Classes
    AnyRef → Any
  12. def hashCode(): Int

    Definition Classes
    AnyRef → Any
  13. final def isInstanceOf[T0]: Boolean

    Definition Classes
    Any
  14. final def ne(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  15. final def notify(): Unit

    Definition Classes
    AnyRef
  16. final def notifyAll(): Unit

    Definition Classes
    AnyRef
  17. def omittingXmlDeclaration: DocumentPrinterUsingDom

    Returns a copy of this DocumentPrinter that omits XML declarations

    Returns a copy of this DocumentPrinter that omits XML declarations

    Definition Classes
    DocumentPrinterUsingDomDocumentPrinter
  18. def print(doc: Document): String

    Converts the Document to a String.

    Converts the Document to a String. May use a lot of memory for large XML documents.

    To have more control over the character encoding of the output, when converting the String to bytes (and of the encoding mentioned in the XML declaration, if any), consider using one of the other overloaded print methods taking a Document.

    Definition Classes
    DocumentPrinterUsingDomDocumentPrinter
  19. def print(doc: Document, encoding: String, outputStream: OutputStream): Unit

    Serializes the Document to an output stream, using the given encoding.

    Serializes the Document to an output stream, using the given encoding. This method should close the output stream afterwards.

    May use a lot of memory for large XML documents, although not as much as the print method that returns a byte array.

    Definition Classes
    DocumentPrinterUsingDomDocumentPrinter
  20. final def print(elm: Elem): String

    Converts the Elem to a String, omitting the XML declaration.

    Converts the Elem to a String, omitting the XML declaration. May use a lot of memory for large XML documents.

    To have more control over the character encoding of the output, when converting the String to bytes (and of the encoding mentioned in the XML declaration, if any), consider using one of the other overloaded print methods taking an Elem.

    Definition Classes
    AbstractDocumentPrinterDocumentPrinter
  21. final def print(elm: Elem, encoding: String, outputStream: OutputStream): Unit

    Serializes the Elem to an output stream, omitting the XML declaration.

    Serializes the Elem to an output stream, omitting the XML declaration. This method should close the output stream afterwards.

    Definition Classes
    AbstractDocumentPrinterDocumentPrinter
  22. final def print(elm: Elem, encoding: String): Array[Byte]

    Converts the Elem to a byte array, omitting the XML declaration

    Converts the Elem to a byte array, omitting the XML declaration

    Definition Classes
    AbstractDocumentPrinterDocumentPrinter
  23. final def print(doc: Document, encoding: String): Array[Byte]

    Converts the Document to a byte array, using the given encoding.

    Converts the Document to a byte array, using the given encoding. May use a lot of memory for large XML documents.

    Definition Classes
    AbstractDocumentPrinterDocumentPrinter
  24. final def synchronized[T0](arg0: ⇒ T0): T0

    Definition Classes
    AnyRef
  25. def toString(): String

    Definition Classes
    AnyRef → Any
  26. val transformerCreator: (TransformerFactory) ⇒ Transformer

  27. val transformerFactory: TransformerFactory

  28. final def wait(): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  29. final def wait(arg0: Long, arg1: Int): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  30. final def wait(arg0: Long): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  31. def withDocumentBuilderCreator(newDocBuilderCreator: (DocumentBuilderFactory) ⇒ DocumentBuilder): DocumentPrinterUsingDom

  32. def withTransformerCreator(newTransformerCreator: (TransformerFactory) ⇒ Transformer): DocumentPrinterUsingDom

  33. def withTransformerCreatorForHtml: DocumentPrinterUsingDom

Inherited from AbstractDocumentPrinter

Inherited from DocumentPrinter

Inherited from AnyRef

Inherited from Any

Ungrouped