By Ariel Flesler on May 2, 2008


This is a JavaScript class, based on .NET’s XMLTextWriter. This is not a port, but a reduced and adapted version. It allows you to easily generate XML. The script is heavily commented for complete understanding.

Open a GreyBox window to see the demos.



The constructor accepts 2 optional arguments: encoding, and version. You call it like this:

var xw = new XMLWriter( 'UTF-8', '1.0' );

Class instances have the following methods:

  • writeStartDocument([ bool standalone ])
    Opens a new document, must be call on start, if standalone is specified, standalone=”true/false” will be added to the header.
  • writeEndDocument()
    Closes the active document, it’s not really mandatory to call it.
  • writeDocType( string declarations )
    Adds a doctype to the document, can be called at anytime. If specified, a doctype will be included in the generated xml, in this form:
    <!DOCTYPE root-element declarations>
  • writeStartElement( string name [, string ns ] )
    Creates a new node element with this name, and it becomes the active element. A namespace can be specified.
  • writeEndElement()
    Closes the active element and goes up one level.
  • writeAttributeString( string attr, string value )
    Adds an attribute to the active element.
  • writeString( string text )
    Adds a text node to the active element.
  • writeElementString( string name, string txt [, string ns ] )
    Shortcut method, creates an element, adds the text and closes it.
  • writeCDATA( string text )
    Adds a text node wrapped with CDATA, to the active element.
  • writeComment( string text )
    Adds a comment node to the active element.
  • flush(): string
    Generates the XML string and returns it.
  • close()
    Closes the writer and cleans up.
  • getDocument()
    Generates a real XMLDocument from the writer. This method doesn’t belong to the original class.


You can choose whether the generated XML is formatted or not, and how. You can modify the following options for each instance or from XMLWriter.prototype to affect them all:

  • encoding ‘ISO-8859-1’ by default.
  • version ‘1.0’ by default.
  • formatting ‘indented'(default) or ‘none’.
  • indentChar ‘t’ by default, char to indent.
  • indentation # of chars added per level, 1 by default.
  • newLine ‘n’ by default, char to separate lines.

If you choose formatting = ‘none’, you don’t need to modify indentChar, indentation or newLine.

Source Code

Paste this source code into the designated areas.

External file

Paste this code into an external JavaScript file named: xmlWriter.js