
= Release 1.4 =

== New Features ==

 * Document: New method iterator()
 * New tools to map a document to a Java class

== Bug Fixes ==

== Breaking Changes ==

== Planned Features ==

 * Pass all tests of the "XML W3C Conformance Test Suite" (and not only the
   "standalone+valid" ones).
 * Allow to specify a resolver for external resources (DTDs, XML Schema, etc).
 * Better API to create and modify DTD structures
 * Raise test coverage to the max, again (it's currently "only" 89.5% mostly due
   to the incomplete DTD API).
 * Extract code to parse DTDs into an independent class (currently, it's in
   XMLParser where it doesn't really belong). That would also be a nice test
   case for how to extend the standard XML parser.
 * Create an API to verify the structure of a document or a subtree against
   a DTD or using custom code.

= Release 1.3 =

== New Features ==

 * Element: New methods to set and remove attributes
 * Copying of nodes (like clone() but without a checked exception)
 * Support for namespaces
 * Text: New methods getTrimmedText() and getNormalizedText()
 * Token: New method getPrefixWhiteSpace()
 * XMLParser: New method `static parse(File)`
 * XMLWriter can now format (a.k.a pretty print) the document on the fly
 
== Bug Fixes ==

== Breaking Changes ==

 * Attribute instances can now store the whitespace before the name
   and around the equals sign
 * XMLTokenizer.Type.ELEMENT_WHITESPACE is now DTD_WHITESPACE
 * Attribute.getValue() and setValue() now work on the attribute value
   instead of the XML output. Attribute.getAttributeValue()
 * Static helper Attribute.toXML(name,value,quoteChar) has been deleted.

= Release 1.2 =

== New Features ==

 * Support for DTDs (reading and writing; there is no verifier, yet).
 * Sorted tests into different files to make it easier to find them again
 * Added a couple of helper methods to XMLUtils to check if a node is
   a text, an element or an attribute.
 * To allow to extend Element and Attribute in custom classes,
   setType() is now protected.
 * New method: Parent.clearNodes() to clear all child nodes
 * New method: Element.childIndexOf() to get the index of a child element
 * You can now chose to parse entities, resolve them or treat them as
   plain text.
 * There is a class which can expand all HTML entities (HTML 2.0 - 4.0 and XHTML).
 * Nodes which contain text now offer getText() and setText().
 * ProcessingInstruction is now modeled more closely after the XML spec. It
   has a target and an optional text.
 * Moved code to handle the XML declaration into a new class
   XMLDeclaration
 * New class Location which can figure out the line and column of a node
 * New class XMLWriter which keeps track of the node that is currently being
   written. This is used in Location to find the position of a node in the
   resulting XML document or partial tree.
 * Improved error messages to show the best location info possible. In many
   cases, the information in XMLParseException is good enough to use it in
   an online editor.
 * DecentXML can now parse simple DTDs. Most of the information is ignored and
   just stuffed into lists of nodes, though.
 * Switched to JUnit 4.4 and maven-javadoc-plugin 2.5.
 * DecentXML passes all tests of the "XML W3C Conformance Test Suite"
   (http://www.w3.org/XML/Test/xmlconf-20031210.html) which are marked as
   "valid" and "standalone" (i.e. no external references).
   It probably also passes all the other "valid" tests but since they
   refer to external DTD files (which DecentXML doesn't currently load),
   running them would be futile.
 * Improved error messages. Many of them now contain a piece of the XML
   where the error occurred to make it easier to locate this spot without
   an editor which shows line and column numbers.

== Bug fixes ==

 * Element.clearChildNodes() now only deletes elements; it used to
   delete all nodes. 

== Breaking Changes ==

 * Removed XMLParser.escapeXML(). Use XMLUtils.escapeXML() instead.
 * Extracted Token into a top level class
 * Deleted XMLTokenizer.isXMLIdentifier() and replaced it with several
   helper methods: XMLTokenizer.isNameChar(), XMLTokenizer.isNameStartChar()
   and XMLTokenizer.parseName()

== Deprecations ==

 * Element.getNodePath() renamed to Element.getChildPath().
   getNodePath() is now deprecated.
 * Element.clearChildNodes() is deprecated, use Element.clearChildren() instead

= Release 1.1 =

== New Features ==

 * Added copyright notice
 * Added documentation
 * Support to manipulate the XML declaration in the document
 * Added Eclipse project files
 * There is an unescapeXML() method in XMLUtils.
 * Code in BasicNode is better protected against NPEs
 * A lot of private methods have been made public or at
   least protected to allow better reuse.
 * Added more methods to Document to manipulate nodes.
 * Added parent/child relations
 * Elements can be asked for their path in the document and
   you can search elements by path
 * Code cleanup

== Breaking Changes ==

 * Element.getChild() was renamed to Element.getNode() to make the API
   naming more consistent. A "node" is something derived from Node,
   while a child is always an instance of Element.
 * The text for the type PROCESSING_INSTRUCTION has changed from
   "PI" to "PROCESSING_INSTRUCTION".
 * If a token has no type, toString() will now contain "null" instead
   of "***".
 * XMLTokenizer.Token.typeToString() was deleted. Use Token.getType().toString()
   if you must.

== Deprecations ==

 * XMLParser.escapeXML() has moved to XMLUtils.escapeXML()
 
= Release 1.0 =

Initial release.