Package org.pushingpixels.lafplugin

# Class XMLElement

java.lang.Object
org.pushingpixels.lafplugin.XMLElement

public class XMLElement extends Object
XMLElement is a representation of an XML object. The object is able to parse XML code.

Parsing XML Data
  You can parse XML data using the following code:
  `XMLElement xml = new XMLElement();
  FileReader reader = new FileReader("filename.xml");
  xml.parseFromReader(reader);`

Retrieving Attributes
  You can enumerate the attributes of an element using the method `enumerateAttributeNames`. The attribute values can be retrieved using the method `getStringAttribute`. The following example shows how to list the attributes of an element:
  `XMLElement element = ...;
  Enumeration enum = element.getAttributeNames();
  while (enum.hasMoreElements()) {
  String key = (String) enum.nextElement();
  String value = element.getStringAttribute(key);
  System.out.println(key + " = " + value);
  }`

Retrieving Child Elements
  You can enumerate the children of an element using `enumerateChildren`. The number of child elements can be retrieved using `countChildren`.

Elements Containing Character Data
  If an elements contains character data, like in the following example:
  `<title>The Title</title>`
  you can retrieve that data using the method `getContent`.

Subclassing XMLElement
  When subclassing XMLElement, you need to override the method `createAnotherElement` which has to return a new copy of the receiver.

see nanoxml.XMLParseException

## Field Summary

Fields
Modifier and Type
Field
Description
`static final int`
`NANOXML_MAJOR_VERSION`
Major version of NanoXML.
`static final int`
`NANOXML_MINOR_VERSION`
Minor version of NanoXML.

## Constructor Summary

Constructors
Modifier
Constructor
Description
``
`XMLElement()`
Creates and initializes a new XML element.
``
`XMLElement(boolean skipLeadingWhitespace)`
Creates and initializes a new XML element.
``
`XMLElement(Hashtable entities)`
Creates and initializes a new XML element.
``
`XMLElement(Hashtable entities, boolean skipLeadingWhitespace)`
Creates and initializes a new XML element.
``
`XMLElement(Hashtable entities, boolean skipLeadingWhitespace, boolean ignoreCase)`
Creates and initializes a new XML element.
`protected`
`XMLElement(Hashtable entities, boolean skipLeadingWhitespace, boolean fillBasicConversionTable, boolean ignoreCase)`
Creates and initializes a new XML element.

## Method Summary

Modifier and Type
Method
Description
`void`
`addChild(XMLElement child)`
Adds a child element.
`void`
`addProperty(String name, double value)`
Deprecated.
Use `setDoubleAttribute` instead.
`void`
`addProperty(String key, int value)`
Deprecated.
Use `setIntAttribute` instead.
`void`
`addProperty(String name, Object value)`
Deprecated.
Use `setAttribute` instead.
`protected boolean`
`checkCDATA(StringBuffer buf)`
Scans a special tag and if the tag is a CDATA section, append its content to `buf`.
`protected boolean`
`checkLiteral(String literal)`
Scans the data for literal text.
`int`
`countChildren()`
Returns the number of child elements of the element.
`protected XMLElement`
`createAnotherElement()`
Creates a new similar XML element.
`Enumeration`
`enumerateAttributeNames()`
Enumerates the attribute names.
`Enumeration`
`enumerateChildren()`
Enumerates the child elements.
`Enumeration`
`enumeratePropertyNames()`
Deprecated.
Use `enumerateAttributeNames` instead.
`protected XMLParseException`
`expectedInput(String charSet)`
Creates a parse exception for when the next character read is not the character that was expected.
`Object`
`getAttribute(String name)`
Returns an attribute of the element.
`Object`
`getAttribute(String name, Object defaultValue)`
Returns an attribute of the element.
`Object`
`getAttribute(String name, Hashtable valueSet, String defaultKey, boolean allowLiterals)`
Returns an attribute by looking up a key in a hashtable.
`boolean`
`getBooleanAttribute(String name, String trueValue, String falseValue, boolean defaultValue)`
Returns an attribute of the element.
`Vector`
`getChildren()`
Returns the child elements as a Vector.
`String`
`getContent()`
Returns the PCDATA content of the object.
`String`
`getContents()`
Deprecated.
Use `getContent` instead.
`double`
`getDoubleAttribute(String name)`
Returns an attribute of the element.
`double`
`getDoubleAttribute(String name, double defaultValue)`
Returns an attribute of the element.
`double`
`getDoubleAttribute(String name, Hashtable valueSet, String defaultKey, boolean allowLiteralNumbers)`
Returns an attribute by looking up a key in a hashtable.
`int`
`getIntAttribute(String name)`
Returns an attribute of the element.
`int`
`getIntAttribute(String name, int defaultValue)`
Returns an attribute of the element.
`int`
`getIntAttribute(String name, Hashtable valueSet, String defaultKey, boolean allowLiteralNumbers)`
Returns an attribute by looking up a key in a hashtable.
`int`
`getIntProperty(String name, Hashtable valueSet, String defaultKey)`
Deprecated.
Use `getIntAttribute` instead.
`int`
`getLineNr()`
Returns the line nr in the source data on which the element is found.
`String`
`getName()`
Returns the name of the element.
`String`
`getProperty(String name)`
Deprecated.
Use `getStringAttribute` instead.
`double`
`getProperty(String name, double defaultValue)`
Deprecated.
Use `getDoubleAttribute` instead.
`int`
`getProperty(String name, int defaultValue)`
Deprecated.
Use `getIntAttribute` instead.
`String`
`getProperty(String name, String defaultValue)`
Deprecated.
Use `getStringAttribute` instead.
`boolean`
`getProperty(String key, String trueValue, String falseValue, boolean defaultValue)`
Deprecated.
Use `getBooleanAttribute` instead.
`Object`
`getProperty(String name, Hashtable valueSet, String defaultKey)`
Deprecated.
Use `getAttribute` instead.
`double`
`getSpecialDoubleProperty(String name, Hashtable valueSet, String defaultKey)`
Deprecated.
Use `getDoubleAttribute` instead.
`int`
`getSpecialIntProperty(String name, Hashtable valueSet, String defaultKey)`
Deprecated.
Use `getIntAttribute` instead.
`String`
`getStringAttribute(String name)`
Returns an attribute of the element.
`String`
`getStringAttribute(String name, String defaultValue)`
Returns an attribute of the element.
`String`
`getStringAttribute(String name, Hashtable valueSet, String defaultKey, boolean allowLiterals)`
Returns an attribute by looking up a key in a hashtable.
`String`
`getStringProperty(String name, Hashtable valueSet, String defaultKey)`
Deprecated.
Use `getStringAttribute` instead.
`String`
`getTagName()`
Deprecated.
Use `getName` instead.
`protected XMLParseException`
`invalidValue(String name, String value)`
Creates a parse exception for when an invalid value is given to a method.
`protected XMLParseException`
`invalidValueSet(String name)`
Creates a parse exception for when an invalid valueset is given to a method.
`void`
`parseCharArray(char[] input, int offset, int end)`
Reads one XML element from a char array and parses it.
`void`
`parseCharArray(char[] input, int offset, int end, int startingLineNr)`
Reads one XML element from a char array and parses it.
`void`
`parseFromReader(Reader reader)`
Reads one XML element from a java.io.Reader and parses it.
`void`
`parseFromReader(Reader reader, int startingLineNr)`
Reads one XML element from a java.io.Reader and parses it.
`void`
`parseString(String string)`
Reads one XML element from a String and parses it.
`void`
`parseString(String string, int offset)`
Reads one XML element from a String and parses it.
`void`
`parseString(String string, int offset, int end)`
Reads one XML element from a String and parses it.
`void`
`parseString(String string, int offset, int end, int startingLineNr)`
Reads one XML element from a String and parses it.
`protected char`
`readChar()`
Reads a character from a reader.
`void`
`removeAttribute(String name)`
Removes an attribute.
`void`
`removeChild(String name)`
Deprecated.
Use `removeAttribute` instead.
`void`
`removeChild(XMLElement child)`
Removes a child element.
`void`
`removeProperty(String name)`
Deprecated.
Use `removeAttribute` instead.
`protected void`
`resolveEntity(StringBuffer buf)`
Resolves an entity.
`protected void`
`scanElement(XMLElement elt)`
Scans an XML element.
`protected void`
`scanIdentifier(StringBuffer result)`
Scans an identifier from the current reader.
`protected void`
`scanPCData(StringBuffer data)`
Scans a #PCDATA element.
`protected void`
`scanString(StringBuffer string)`
This method scans a delimited string from the current reader.
`protected char`
`scanWhitespace()`
This method scans an identifier from the current reader.
`protected char`
`scanWhitespace(StringBuffer result)`
This method scans an identifier from the current reader.
`void`
`setAttribute(String name, Object value)`
Adds or modifies an attribute.
`void`
`setContent(String content)`
Changes the content string.
`void`
`setDoubleAttribute(String name, double value)`
Adds or modifies an attribute.
`void`
`setIntAttribute(String name, int value)`
Adds or modifies an attribute.
`void`
`setName(String name)`
Changes the name of the element.
`void`
`setTagName(String name)`
Deprecated.
Use `setName` instead.
`protected void`
`skipComment()`
Skips a comment.
`protected void`
`skipSpecialTag(int bracketLevel)`
Skips a special tag or comment.
`protected XMLParseException`
`syntaxError(String context)`
Creates a parse exception for when a syntax error occured.
`String`
`toString()`
Writes the XML element to a string.
`protected XMLParseException`
`unexpectedEndOfData()`
Creates a parse exception for when the end of the data input has been reached.
`protected XMLParseException`
`unknownEntity(String name)`
Creates a parse exception for when an entity could not be resolved.
`protected void`
`unreadChar(char ch)`
Pushes a character back to the read-back buffer.
`void`
`write(Writer writer)`
Writes the XML element to a writer.
`protected void`
`writeEncoded(Writer writer, String str)`
Writes a string encoded to a writer.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

## Field Details

### NANOXML_MAJOR_VERSION

public static final int NANOXML_MAJOR_VERSION
Major version of NanoXML. Classes with the same major and minor version are binary compatible. Classes with the same major version are source compatible. If the major version is different, you may need to modify the client source code. see nanoxml.XMLElement#NANOXML_MINOR_VERSION

See Also:
  - Constant Field Values

### NANOXML_MINOR_VERSION

public static final int NANOXML_MINOR_VERSION
Minor version of NanoXML. Classes with the same major and minor version are binary compatible. Classes with the same major version are source compatible. If the major version is different, you may need to modify the client source code. see nanoxml.XMLElement#NANOXML_MAJOR_VERSION

See Also:
  - Constant Field Values

## Constructor Details

### XMLElement

public XMLElement()
Creates and initializes a new XML element. Calling the construction is equivalent to:

`new XMLElement(new Hashtable(), false, true)`

Postconditions:
  - countChildren() => 0
  - enumerateChildren() => empty enumeration
  - enumeratePropertyNames() => empty enumeration
  - getChildren() => empty vector
  - getContent() => ""
  - getLineNr() => 0
  - getName() => null

see nanoxml.XMLElement#XMLElement(java.util.Hashtable) XMLElement(Hashtable) see nanoxml.XMLElement#XMLElement(boolean) see nanoxml.XMLElement#XMLElement(java.util.Hashtable,boolean) XMLElement(Hashtable, boolean)

### XMLElement

public XMLElement(Hashtable entities)
Creates and initializes a new XML element. Calling the construction is equivalent to:

`new XMLElement(entities, false, true)`

Parameters:
  `entities` - The entity conversion table.

Preconditions:
  - `entities != null`

Postconditions:
  - countChildren() => 0
  - enumerateChildren() => empty enumeration
  - enumeratePropertyNames() => empty enumeration
  - getChildren() => empty vector
  - getContent() => ""
  - getLineNr() => 0
  - getName() => null

see nanoxml.XMLElement#XMLElement() see nanoxml.XMLElement#XMLElement(boolean) see nanoxml.XMLElement#XMLElement(java.util.Hashtable,boolean) XMLElement(Hashtable, boolean)

### XMLElement

public XMLElement(boolean skipLeadingWhitespace)
Creates and initializes a new XML element. Calling the construction is equivalent to:

`new XMLElement(new Hashtable(), skipLeadingWhitespace, true)`

Parameters:
  `skipLeadingWhitespace` - `true` if leading and trailing whitespace in PCDATA content has to be removed.

Postconditions:
  - countChildren() => 0
  - enumerateChildren() => empty enumeration
  - enumeratePropertyNames() => empty enumeration
  - getChildren() => empty vector
  - getContent() => ""
  - getLineNr() => 0
  - getName() => null

see nanoxml.XMLElement#XMLElement() see nanoxml.XMLElement#XMLElement(java.util.Hashtable) XMLElement(Hashtable) see nanoxml.XMLElement#XMLElement(java.util.Hashtable,boolean) XMLElement(Hashtable, boolean)

### XMLElement

public XMLElement(Hashtable entities, boolean skipLeadingWhitespace)
Creates and initializes a new XML element. Calling the construction is equivalent to:

`new XMLElement(entities, skipLeadingWhitespace, true)`

Parameters:
  `entities` - The entity conversion table.
  `skipLeadingWhitespace` - `true` if leading and trailing whitespace in PCDATA content has to be removed.

Preconditions:
  - `entities != null`

Postconditions:
  - countChildren() => 0
  - enumerateChildren() => empty enumeration
  - enumeratePropertyNames() => empty enumeration
  - getChildren() => empty vector
  - getContent() => ""
  - getLineNr() => 0
  - getName() => null

see nanoxml.XMLElement#XMLElement() see nanoxml.XMLElement#XMLElement(boolean) see nanoxml.XMLElement#XMLElement(java.util.Hashtable) XMLElement(Hashtable)

### XMLElement

public XMLElement(Hashtable entities, boolean skipLeadingWhitespace, boolean ignoreCase)
Creates and initializes a new XML element.

Parameters:
  `entities` - The entity conversion table.
  `skipLeadingWhitespace` - `true` if leading and trailing whitespace in PCDATA content has to be removed.
  `ignoreCase` - `true` if the case of element and attribute names have to be ignored.

Preconditions:
  - `entities != null`

Postconditions:
  - countChildren() => 0
  - enumerateChildren() => empty enumeration
  - enumeratePropertyNames() => empty enumeration
  - getChildren() => empty vector
  - getContent() => ""
  - getLineNr() => 0
  - getName() => null

see nanoxml.XMLElement#XMLElement() see nanoxml.XMLElement#XMLElement(boolean) see nanoxml.XMLElement#XMLElement(java.util.Hashtable) XMLElement(Hashtable) see nanoxml.XMLElement#XMLElement(java.util.Hashtable,boolean) XMLElement(Hashtable, boolean)

### XMLElement

protected XMLElement(Hashtable entities, boolean skipLeadingWhitespace, boolean fillBasicConversionTable, boolean ignoreCase)
Creates and initializes a new XML element.

This constructor should only be called from `createAnotherElement` to create child elements.

Parameters:
  `entities` - The entity conversion table.
  `skipLeadingWhitespace` - `true` if leading and trailing whitespace in PCDATA content has to be removed.
  `fillBasicConversionTable` - `true` if the basic entities need to be added to the entity list.
  `ignoreCase` - `true` if the case of element and attribute names have to be ignored.

Preconditions:
  - `entities != null`
  - if `fillBasicConversionTable == false` then `entities` contains at least the following entries: `amp`, `lt`, `gt`, `apos` and `quot`

Postconditions:
  - countChildren() => 0
  - enumerateChildren() => empty enumeration
  - enumeratePropertyNames() => empty enumeration
  - getChildren() => empty vector
  - getContent() => ""
  - getLineNr() => 0
  - getName() => null

see nanoxml.XMLElement#createAnotherElement()

## Method Details

### addChild

public void addChild(XMLElement child)
Adds a child element.

Parameters:
  `child` - The child element to add.

Preconditions:
  - `child != null`
  - `child.getName() != null`
  - `child` does not have a parent element

Postconditions:
  - countChildren() => old.countChildren() + 1
  - enumerateChildren() => old.enumerateChildren() + child
  - getChildren() => old.enumerateChildren() + child

see nanoxml.XMLElement#countChildren() see nanoxml.XMLElement#enumerateChildren() see nanoxml.XMLElement#getChildren() see nanoxml.XMLElement#removeChild(nanoxml.XMLElement) removeChild(XMLElement)

### setAttribute

public void setAttribute(String name, Object value)
Adds or modifies an attribute.

Parameters:
  `name` - The name of the attribute.
  `value` - The value of the attribute.

Preconditions:
  - `name != null`
  - `name` is a valid XML identifier
  - `value != null`

Postconditions:
  - enumerateAttributeNames() => old.enumerateAttributeNames() + name
  - getAttribute(name) => value

see nanoxml.XMLElement#setDoubleAttribute(java.lang.String, double) setDoubleAttribute(String, double) see nanoxml.XMLElement#setIntAttribute(java.lang.String, int) setIntAttribute(String, int) see nanoxml.XMLElement#enumerateAttributeNames() see nanoxml.XMLElement#getAttribute(java.lang.String) getAttribute(String) see nanoxml.XMLElement#getAttribute(java.lang.String, java.lang.Object) getAttribute(String, Object) see nanoxml.XMLElement#getAttribute(java.lang.String, java.util.Hashtable, java.lang.String, boolean) getAttribute(String, Hashtable, String, boolean) see nanoxml.XMLElement#getStringAttribute(java.lang.String) getStringAttribute(String) see nanoxml.XMLElement#getStringAttribute(java.lang.String, java.lang.String) getStringAttribute(String, String) see nanoxml.XMLElement#getStringAttribute(java.lang.String, java.util.Hashtable, java.lang.String, boolean) getStringAttribute(String, Hashtable, String, boolean)

### addProperty

public void addProperty(String name, Object value)
Deprecated.
Use `setAttribute` instead.
Adds or modifies an attribute.

Parameters:
  `name` - The name of the attribute.
  `value` - The value of the attribute.

### setIntAttribute

public void setIntAttribute(String name, int value)
Adds or modifies an attribute.

Parameters:
  `name` - The name of the attribute.
  `value` - The value of the attribute.

Preconditions:
  - `name != null`
  - `name` is a valid XML identifier

Postconditions:
  - enumerateAttributeNames() => old.enumerateAttributeNames() + name
  - getIntAttribute(name) => value

see nanoxml.XMLElement#setDoubleAttribute(java.lang.String, double) setDoubleAttribute(String, double) see nanoxml.XMLElement#setAttribute(java.lang.String, java.lang.Object) setAttribute(String, Object) see nanoxml.XMLElement#removeAttribute(java.lang.String) removeAttribute(String) see nanoxml.XMLElement#enumerateAttributeNames() see nanoxml.XMLElement#getIntAttribute(java.lang.String) getIntAttribute(String) see nanoxml.XMLElement#getIntAttribute(java.lang.String, int) getIntAttribute(String, int) see nanoxml.XMLElement#getIntAttribute(java.lang.String, java.util.Hashtable, java.lang.String, boolean) getIntAttribute(String, Hashtable, String, boolean)

### addProperty

public void addProperty(String key, int value)
Deprecated.
Use `setIntAttribute` instead.
Adds or modifies an attribute.

Parameters:
  `key` - The name of the attribute.
  `value` - The value of the attribute.

### setDoubleAttribute

public void setDoubleAttribute(String name, double value)
Adds or modifies an attribute.

Parameters:
  `name` - The name of the attribute.
  `value` - The value of the attribute.

Preconditions:
  - `name != null`
  - `name` is a valid XML identifier

Postconditions:
  - enumerateAttributeNames() => old.enumerateAttributeNames() + name
  - getDoubleAttribute(name) => value

see nanoxml.XMLElement#setIntAttribute(java.lang.String, int) setIntAttribute(String, int) see nanoxml.XMLElement#setAttribute(java.lang.String, java.lang.Object) setAttribute(String, Object) see nanoxml.XMLElement#removeAttribute(java.lang.String) removeAttribute(String) see nanoxml.XMLElement#enumerateAttributeNames() see nanoxml.XMLElement#getDoubleAttribute(java.lang.String) getDoubleAttribute(String) see nanoxml.XMLElement#getDoubleAttribute(java.lang.String, double) getDoubleAttribute(String, double) see nanoxml.XMLElement#getDoubleAttribute(java.lang.String, java.util.Hashtable, java.lang.String, boolean) getDoubleAttribute(String, Hashtable, String, boolean)

### addProperty

public void addProperty(String name, double value)
Deprecated.
Use `setDoubleAttribute` instead.
Adds or modifies an attribute.

Parameters:
  `name` - The name of the attribute.
  `value` - The value of the attribute.

### countChildren

public int countChildren()
Returns the number of child elements of the element.

Postconditions:
  - `result >= 0`

see nanoxml.XMLElement#addChild(nanoxml.XMLElement) addChild(XMLElement) see nanoxml.XMLElement#enumerateChildren() see nanoxml.XMLElement#getChildren() see nanoxml.XMLElement#removeChild(nanoxml.XMLElement) removeChild(XMLElement)

### enumerateAttributeNames

public Enumeration enumerateAttributeNames()
Enumerates the attribute names.

Postconditions:
  - `result != null`

see nanoxml.XMLElement#setDoubleAttribute(java.lang.String, double) setDoubleAttribute(String, double) see nanoxml.XMLElement#setIntAttribute(java.lang.String, int) setIntAttribute(String, int) see nanoxml.XMLElement#setAttribute(java.lang.String, java.lang.Object) setAttribute(String, Object) see nanoxml.XMLElement#removeAttribute(java.lang.String) removeAttribute(String) see nanoxml.XMLElement#getAttribute(java.lang.String) getAttribute(String) see nanoxml.XMLElement#getAttribute(java.lang.String, java.lang.Object) getAttribute(String, String) see nanoxml.XMLElement#getAttribute(java.lang.String, java.util.Hashtable, java.lang.String, boolean) getAttribute(String, Hashtable, String, boolean) see nanoxml.XMLElement#getStringAttribute(java.lang.String) getStringAttribute(String) see nanoxml.XMLElement#getStringAttribute(java.lang.String, java.lang.String) getStringAttribute(String, String) see nanoxml.XMLElement#getStringAttribute(java.lang.String, java.util.Hashtable, java.lang.String, boolean) getStringAttribute(String, Hashtable, String, boolean) see nanoxml.XMLElement#getIntAttribute(java.lang.String) getIntAttribute(String) see nanoxml.XMLElement#getIntAttribute(java.lang.String, int) getIntAttribute(String, int) see nanoxml.XMLElement#getIntAttribute(java.lang.String, java.util.Hashtable, java.lang.String, boolean) getIntAttribute(String, Hashtable, String, boolean) see nanoxml.XMLElement#getDoubleAttribute(java.lang.String) getDoubleAttribute(String) see nanoxml.XMLElement#getDoubleAttribute(java.lang.String, double) getDoubleAttribute(String, double) see nanoxml.XMLElement#getDoubleAttribute(java.lang.String, java.util.Hashtable, java.lang.String, boolean) getDoubleAttribute(String, Hashtable, String, boolean) see nanoxml.XMLElement#getBooleanAttribute(java.lang.String, java.lang.String, java.lang.String, boolean) getBooleanAttribute(String, String, String, boolean)

### enumeratePropertyNames

public Enumeration enumeratePropertyNames()
Deprecated.
Use `enumerateAttributeNames` instead.
Enumerates the attribute names.

### enumerateChildren

public Enumeration enumerateChildren()
Enumerates the child elements.

Postconditions:
  - `result != null`

see nanoxml.XMLElement#addChild(nanoxml.XMLElement) addChild(XMLElement) see nanoxml.XMLElement#countChildren() see nanoxml.XMLElement#getChildren() see nanoxml.XMLElement#removeChild(nanoxml.XMLElement) removeChild(XMLElement)

### getChildren

public Vector getChildren()
Returns the child elements as a Vector. It is safe to modify this Vector.

Postconditions:
  - `result != null`

see nanoxml.XMLElement#addChild(nanoxml.XMLElement) addChild(XMLElement) see nanoxml.XMLElement#countChildren() see nanoxml.XMLElement#enumerateChildren() see nanoxml.XMLElement#removeChild(nanoxml.XMLElement) removeChild(XMLElement)

### getContents

public String getContents()
Deprecated.
Use `getContent` instead.
Returns the PCDATA content of the object. If there is no such content, `null` is returned.

### getContent

public String getContent()
Returns the PCDATA content of the object. If there is no such content, `null` is returned. see nanoxml.XMLElement#setContent(java.lang.String) setContent(String)

### getLineNr

public int getLineNr()
Returns the line nr in the source data on which the element is found. This method returns `0` there is no associated source data.

Postconditions:
  - `result >= 0`

### getAttribute

public Object getAttribute(String name)
Returns an attribute of the element. If the attribute doesn't exist, `null` is returned.

Parameters:
  `name` - The name of the attribute.

Preconditions:
  - `name != null`
  - `name` is a valid XML identifier

see nanoxml.XMLElement#setAttribute(java.lang.String, java.lang.Object) setAttribute(String, Object) see nanoxml.XMLElement#removeAttribute(java.lang.String) removeAttribute(String) see nanoxml.XMLElement#enumerateAttributeNames() see nanoxml.XMLElement#getAttribute(java.lang.String, java.lang.Object) getAttribute(String, Object) see nanoxml.XMLElement#getAttribute(java.lang.String, java.util.Hashtable, java.lang.String, boolean) getAttribute(String, Hashtable, String, boolean)

### getAttribute

public Object getAttribute(String name, Object defaultValue)
Returns an attribute of the element. If the attribute doesn't exist, `defaultValue` is returned.

Parameters:
  `name` - The name of the attribute.
  `defaultValue` - Key to use if the attribute is missing.

Preconditions:
  - `name != null`
  - `name` is a valid XML identifier

see nanoxml.XMLElement#setAttribute(java.lang.String, java.lang.Object) setAttribute(String, Object) see nanoxml.XMLElement#removeAttribute(java.lang.String) removeAttribute(String) see nanoxml.XMLElement#enumerateAttributeNames() see nanoxml.XMLElement#getAttribute(java.lang.String) getAttribute(String) see nanoxml.XMLElement#getAttribute(java.lang.String, java.util.Hashtable, java.lang.String, boolean) getAttribute(String, Hashtable, String, boolean)

### getAttribute

public Object getAttribute(String name, Hashtable valueSet, String defaultKey, boolean allowLiterals)
Returns an attribute by looking up a key in a hashtable. If the attribute doesn't exist, the value corresponding to defaultKey is returned.

As an example, if valueSet contains the mapping `"one" => "1"` and the element contains the attribute `attr="one"`, then `getAttribute("attr", mapping, defaultKey, false)` returns `"1"`.

Parameters:
  `name` - The name of the attribute.
  `valueSet` - Hashtable mapping keys to values.
  `defaultKey` - Key to use if the attribute is missing.
  `allowLiterals` - `true` if literals are valid.

Preconditions:
  - `name != null`
  - `name` is a valid XML identifier
  - `valueSet` != null
  - the keys of `valueSet` are strings

see nanoxml.XMLElement#setAttribute(java.lang.String, java.lang.Object) setAttribute(String, Object) see nanoxml.XMLElement#removeAttribute(java.lang.String) removeAttribute(String) see nanoxml.XMLElement#enumerateAttributeNames() see nanoxml.XMLElement#getAttribute(java.lang.String) getAttribute(String) see nanoxml.XMLElement#getAttribute(java.lang.String, java.lang.Object) getAttribute(String, Object)

### getStringAttribute

public String getStringAttribute(String name)
Returns an attribute of the element. If the attribute doesn't exist, `null` is returned.

Parameters:
  `name` - The name of the attribute.

Preconditions:
  - `name != null`
  - `name` is a valid XML identifier

see nanoxml.XMLElement#setAttribute(java.lang.String, java.lang.Object) setAttribute(String, Object) see nanoxml.XMLElement#removeAttribute(java.lang.String) removeAttribute(String) see nanoxml.XMLElement#enumerateAttributeNames() see nanoxml.XMLElement#getStringAttribute(java.lang.String, java.lang.String) getStringAttribute(String, String) see nanoxml.XMLElement#getStringAttribute(java.lang.String, java.util.Hashtable, java.lang.String, boolean) getStringAttribute(String, Hashtable, String, boolean)

### getStringAttribute

public String getStringAttribute(String name, String defaultValue)
Returns an attribute of the element. If the attribute doesn't exist, `defaultValue` is returned.

Parameters:
  `name` - The name of the attribute.
  `defaultValue` - Key to use if the attribute is missing.

Preconditions:
  - `name != null`
  - `name` is a valid XML identifier

see nanoxml.XMLElement#setAttribute(java.lang.String, java.lang.Object) setAttribute(String, Object) see nanoxml.XMLElement#removeAttribute(java.lang.String) removeAttribute(String) see nanoxml.XMLElement#enumerateAttributeNames() see nanoxml.XMLElement#getStringAttribute(java.lang.String) getStringAttribute(String) see nanoxml.XMLElement#getStringAttribute(java.lang.String, java.util.Hashtable, java.lang.String, boolean) getStringAttribute(String, Hashtable, String, boolean)

### getStringAttribute

public String getStringAttribute(String name, Hashtable valueSet, String defaultKey, boolean allowLiterals)
Returns an attribute by looking up a key in a hashtable. If the attribute doesn't exist, the value corresponding to defaultKey is returned.

As an example, if valueSet contains the mapping `"one" => "1"` and the element contains the attribute `attr="one"`, then `getAttribute("attr", mapping, defaultKey, false)` returns `"1"`.

Parameters:
  `name` - The name of the attribute.
  `valueSet` - Hashtable mapping keys to values.
  `defaultKey` - Key to use if the attribute is missing.
  `allowLiterals` - `true` if literals are valid.

Preconditions:
  - `name != null`
  - `name` is a valid XML identifier
  - `valueSet` != null
  - the keys of `valueSet` are strings
  - the values of `valueSet` are strings

see nanoxml.XMLElement#setAttribute(java.lang.String, java.lang.Object) setAttribute(String, Object) see nanoxml.XMLElement#removeAttribute(java.lang.String) removeAttribute(String) see nanoxml.XMLElement#enumerateAttributeNames() see nanoxml.XMLElement#getStringAttribute(java.lang.String) getStringAttribute(String) see nanoxml.XMLElement#getStringAttribute(java.lang.String, java.lang.String) getStringAttribute(String, String)

### getIntAttribute

public int getIntAttribute(String name)
Returns an attribute of the element. If the attribute doesn't exist, `0` is returned.

Parameters:
  `name` - The name of the attribute.

Preconditions:
  - `name != null`
  - `name` is a valid XML identifier

see nanoxml.XMLElement#setIntAttribute(java.lang.String, int) setIntAttribute(String, int) see nanoxml.XMLElement#enumerateAttributeNames() see nanoxml.XMLElement#getIntAttribute(java.lang.String, int) getIntAttribute(String, int) see nanoxml.XMLElement#getIntAttribute(java.lang.String, java.util.Hashtable, java.lang.String, boolean) getIntAttribute(String, Hashtable, String, boolean)

### getIntAttribute

public int getIntAttribute(String name, int defaultValue)
Returns an attribute of the element. If the attribute doesn't exist, `defaultValue` is returned.

Parameters:
  `name` - The name of the attribute.
  `defaultValue` - Key to use if the attribute is missing.

Preconditions:
  - `name != null`
  - `name` is a valid XML identifier

see nanoxml.XMLElement#setIntAttribute(java.lang.String, int) setIntAttribute(String, int) see nanoxml.XMLElement#enumerateAttributeNames() see nanoxml.XMLElement#getIntAttribute(java.lang.String) getIntAttribute(String) see nanoxml.XMLElement#getIntAttribute(java.lang.String, java.util.Hashtable, java.lang.String, boolean) getIntAttribute(String, Hashtable, String, boolean)

### getIntAttribute

public int getIntAttribute(String name, Hashtable valueSet, String defaultKey, boolean allowLiteralNumbers)
Returns an attribute by looking up a key in a hashtable. If the attribute doesn't exist, the value corresponding to defaultKey is returned.

As an example, if valueSet contains the mapping `"one" => 1` and the element contains the attribute `attr="one"`, then `getIntAttribute("attr", mapping, defaultKey, false)` returns `1`.

Parameters:
  `name` - The name of the attribute.
  `valueSet` - Hashtable mapping keys to values.
  `defaultKey` - Key to use if the attribute is missing.
  `allowLiteralNumbers` - `true` if literal numbers are valid.

Preconditions:
  - `name != null`
  - `name` is a valid XML identifier
  - `valueSet` != null
  - the keys of `valueSet` are strings
  - the values of `valueSet` are Integer objects
  - `defaultKey` is either `null`, a key in `valueSet` or an integer.

see nanoxml.XMLElement#setIntAttribute(java.lang.String, int) setIntAttribute(String, int) see nanoxml.XMLElement#enumerateAttributeNames() see nanoxml.XMLElement#getIntAttribute(java.lang.String) getIntAttribute(String) see nanoxml.XMLElement#getIntAttribute(java.lang.String, int) getIntAttribute(String, int)

### getDoubleAttribute

public double getDoubleAttribute(String name)
Returns an attribute of the element. If the attribute doesn't exist, `0.0` is returned.

Parameters:
  `name` - The name of the attribute.

Preconditions:
  - `name != null`
  - `name` is a valid XML identifier

see nanoxml.XMLElement#setDoubleAttribute(java.lang.String, double) setDoubleAttribute(String, double) see nanoxml.XMLElement#enumerateAttributeNames() see nanoxml.XMLElement#getDoubleAttribute(java.lang.String, double) getDoubleAttribute(String, double) see nanoxml.XMLElement#getDoubleAttribute(java.lang.String, java.util.Hashtable, java.lang.String, boolean) getDoubleAttribute(String, Hashtable, String, boolean)

### getDoubleAttribute

public double getDoubleAttribute(String name, double defaultValue)
Returns an attribute of the element. If the attribute doesn't exist, `defaultValue` is returned.

Parameters:
  `name` - The name of the attribute.
  `defaultValue` - Key to use if the attribute is missing.

Preconditions:
  - `name != null`
  - `name` is a valid XML identifier

see nanoxml.XMLElement#setDoubleAttribute(java.lang.String, double) setDoubleAttribute(String, double) see nanoxml.XMLElement#enumerateAttributeNames() see nanoxml.XMLElement#getDoubleAttribute(java.lang.String) getDoubleAttribute(String) see nanoxml.XMLElement#getDoubleAttribute(java.lang.String, java.util.Hashtable, java.lang.String, boolean) getDoubleAttribute(String, Hashtable, String, boolean)

### getDoubleAttribute

public double getDoubleAttribute(String name, Hashtable valueSet, String defaultKey, boolean allowLiteralNumbers)
Returns an attribute by looking up a key in a hashtable. If the attribute doesn't exist, the value corresponding to defaultKey is returned.

As an example, if valueSet contains the mapping `"one" => 1.0` and the element contains the attribute `attr="one"`, then `getDoubleAttribute("attr", mapping, defaultKey, false)` returns `1.0`.

Parameters:
  `name` - The name of the attribute.
  `valueSet` - Hashtable mapping keys to values.
  `defaultKey` - Key to use if the attribute is missing.
  `allowLiteralNumbers` - `true` if literal numbers are valid.

Preconditions:
  - `name != null`
  - `name` is a valid XML identifier
  - `valueSet != null`
  - the keys of `valueSet` are strings
  - the values of `valueSet` are Double objects
  - `defaultKey` is either `null`, a key in `valueSet` or a double.

see nanoxml.XMLElement#setDoubleAttribute(java.lang.String, double) setDoubleAttribute(String, double) see nanoxml.XMLElement#enumerateAttributeNames() see nanoxml.XMLElement#getDoubleAttribute(java.lang.String) getDoubleAttribute(String) see nanoxml.XMLElement#getDoubleAttribute(java.lang.String, double) getDoubleAttribute(String, double)

### getBooleanAttribute

public boolean getBooleanAttribute(String name, String trueValue, String falseValue, boolean defaultValue)
Returns an attribute of the element. If the attribute doesn't exist, `defaultValue` is returned. If the value of the attribute is equal to `trueValue`, `true` is returned. If the value of the attribute is equal to `falseValue`, `false` is returned. If the value doesn't match `trueValue` or `falseValue`, an exception is thrown.

Parameters:
  `name` - The name of the attribute.
  `trueValue` - The value associated with `true`.
  `falseValue` - The value associated with `true`.
  `defaultValue` - Value to use if the attribute is missing.

Preconditions:
  - `name != null`
  - `name` is a valid XML identifier
  - `trueValue` and `falseValue` are different strings.

see nanoxml.XMLElement#setAttribute(java.lang.String, java.lang.Object) setAttribute(String, Object) see nanoxml.XMLElement#removeAttribute(java.lang.String) removeAttribute(String) see nanoxml.XMLElement#enumerateAttributeNames()

### getIntProperty

public int getIntProperty(String name, Hashtable valueSet, String defaultKey)
Deprecated.
Use `getIntAttribute` instead.
Returns an attribute by looking up a key in a hashtable.

### getProperty

public String getProperty(String name)
Deprecated.
Use `getStringAttribute` instead.
Returns an attribute.

### getProperty

public String getProperty(String name, String defaultValue)
Deprecated.
Use `getStringAttribute` instead.
Returns an attribute.

### getProperty

public int getProperty(String name, int defaultValue)
Deprecated.
Use `getIntAttribute` instead.
Returns an attribute.

### getProperty

public double getProperty(String name, double defaultValue)
Deprecated.
Use `getDoubleAttribute` instead.
Returns an attribute.

### getProperty

public boolean getProperty(String key, String trueValue, String falseValue, boolean defaultValue)
Deprecated.
Use `getBooleanAttribute` instead.
Returns an attribute.

### getProperty

public Object getProperty(String name, Hashtable valueSet, String defaultKey)
Deprecated.
Use `getAttribute` instead.
Returns an attribute by looking up a key in a hashtable.

### getStringProperty

public String getStringProperty(String name, Hashtable valueSet, String defaultKey)
Deprecated.
Use `getStringAttribute` instead.
Returns an attribute by looking up a key in a hashtable.

### getSpecialIntProperty

public int getSpecialIntProperty(String name, Hashtable valueSet, String defaultKey)
Deprecated.
Use `getIntAttribute` instead.
Returns an attribute by looking up a key in a hashtable.

### getSpecialDoubleProperty

public double getSpecialDoubleProperty(String name, Hashtable valueSet, String defaultKey)
Deprecated.
Use `getDoubleAttribute` instead.
Returns an attribute by looking up a key in a hashtable.

### getName

public String getName()
Returns the name of the element. see nanoxml.XMLElement#setName(java.lang.String) setName(String)

### getTagName

public String getTagName()
Deprecated.
Use `getName` instead.
Returns the name of the element.

### parseFromReader

public void parseFromReader(Reader reader) throws IOException, XMLParseException
Reads one XML element from a java.io.Reader and parses it.

Parameters:
  `reader` - The reader from which to retrieve the XML data.

Preconditions:
  - `reader != null`
  - `reader` is not closed

Postconditions:
  - the state of the receiver is updated to reflect the XML element parsed from the reader
  - the reader points to the first character following the last '>' character of the XML element

Throws:
  `IOException` - If an error occured while reading the input. throws nanoxml.XMLParseException If an error occured while parsing the read data.
  `XMLParseException`

### parseFromReader

public void parseFromReader(Reader reader, int startingLineNr) throws IOException, XMLParseException
Reads one XML element from a java.io.Reader and parses it.

Parameters:
  `reader` - The reader from which to retrieve the XML data.
  `startingLineNr` - The line number of the first line in the data.

Preconditions:
  - `reader != null`
  - `reader` is not closed

Postconditions:
  - the state of the receiver is updated to reflect the XML element parsed from the reader
  - the reader points to the first character following the last '>' character of the XML element

Throws:
  `IOException` - If an error occured while reading the input. throws nanoxml.XMLParseException If an error occured while parsing the read data.
  `XMLParseException`

### parseString

public void parseString(String string) throws XMLParseException
Reads one XML element from a String and parses it.

Parameters:
  `string` - The of the XML data.

Preconditions:
  - `string != null`
  - `string.length() > 0`

Postconditions:
  - the state of the receiver is updated to reflect the XML element parsed from the reader

throws nanoxml.XMLParseException If an error occured while parsing the string.
Throws:
  `XMLParseException`

### parseString

public void parseString(String string, int offset) throws XMLParseException
Reads one XML element from a String and parses it.

Parameters:
  `string` - The string ofthe XML data.
  `offset` - The first character in `string` to scan.

Preconditions:
  - `string != null`
  - `offset < string.length()`
  - `offset >= 0`

Postconditions:
  - the state of the receiver is updated to reflect the XML element parsed from the reader

throws nanoxml.XMLParseException If an error occured while parsing the string.
Throws:
  `XMLParseException`

### parseString

public void parseString(String string, int offset, int end) throws XMLParseException
Reads one XML element from a String and parses it.

Parameters:
  `string` - The string of the the XML data.
  `offset` - The first character in `string` to scan.
  `end` - The character where to stop scanning. This character is not scanned.

Preconditions:
  - `string != null`
  - `end <= string.length()`
  - `offset < end`
  - `offset >= 0`

Postconditions:
  - the state of the receiver is updated to reflect the XML element parsed from the reader

throws nanoxml.XMLParseException If an error occured while parsing the string.
Throws:
  `XMLParseException`

### parseString

public void parseString(String string, int offset, int end, int startingLineNr) throws XMLParseException
Reads one XML element from a String and parses it.

Parameters:
  `string` - The string of the the XML data.
  `offset` - The first character in `string` to scan.
  `end` - The character where to stop scanning. This character is not scanned.
  `startingLineNr` - The line number of the first line in the data.

Preconditions:
  - `string != null`
  - `end <= string.length()`
  - `offset < end`
  - `offset >= 0`

Postconditions:
  - the state of the receiver is updated to reflect the XML element parsed from the reader

throws nanoxml.XMLParseException If an error occured while parsing the string.
Throws:
  `XMLParseException`

### parseCharArray

public void parseCharArray(char[] input, int offset, int end) throws XMLParseException
Reads one XML element from a char array and parses it.

Parameters:
  `input` - The string of the the XML data.
  `offset` - The first character in `string` to scan.
  `end` - The character where to stop scanning. This character is not scanned.

Preconditions:
  - `input != null`
  - `end <= input.length`
  - `offset < end`
  - `offset >= 0`

Postconditions:
  - the state of the receiver is updated to reflect the XML element parsed from the reader

throws nanoxml.XMLParseException If an error occured while parsing the string.
Throws:
  `XMLParseException`

### parseCharArray

public void parseCharArray(char[] input, int offset, int end, int startingLineNr) throws XMLParseException
Reads one XML element from a char array and parses it.

Parameters:
  `input` - The string of the the XML data.
  `offset` - The first character in `string` to scan.
  `end` - The character where to stop scanning. This character is not scanned.
  `startingLineNr` - The line number of the first line in the data.

Preconditions:
  - `input != null`
  - `end <= input.length`
  - `offset < end`
  - `offset >= 0`

Postconditions:
  - the state of the receiver is updated to reflect the XML element parsed from the reader

throws nanoxml.XMLParseException If an error occured while parsing the string.
Throws:
  `XMLParseException`

### removeChild

public void removeChild(XMLElement child)
Removes a child element.

Parameters:
  `child` - The child element to remove.

Preconditions:
  - `child != null`
  - `child` is a child element of the receiver

Postconditions:
  - countChildren() => old.countChildren() - 1
  - enumerateChildren() => old.enumerateChildren() - child
  - getChildren() => old.enumerateChildren() - child

see nanoxml.XMLElement#addChild(nanoxml.XMLElement) addChild(XMLElement) see nanoxml.XMLElement#countChildren() see nanoxml.XMLElement#enumerateChildren() see nanoxml.XMLElement#getChildren()

### removeAttribute

public void removeAttribute(String name)
Removes an attribute.

Parameters:
  `name` - The name of the attribute.

Preconditions:
  - `name != null`
  - `name` is a valid XML identifier

Postconditions:
  - enumerateAttributeNames() => old.enumerateAttributeNames() - name
  - getAttribute(name) => `null`

see nanoxml.XMLElement#enumerateAttributeNames() see nanoxml.XMLElement#setDoubleAttribute(java.lang.String, double) setDoubleAttribute(String, double) see nanoxml.XMLElement#setIntAttribute(java.lang.String, int) setIntAttribute(String, int) see nanoxml.XMLElement#setAttribute(java.lang.String, java.lang.Object) setAttribute(String, Object) see nanoxml.XMLElement#getAttribute(java.lang.String) getAttribute(String) see nanoxml.XMLElement#getAttribute(java.lang.String, java.lang.Object) getAttribute(String, Object) see nanoxml.XMLElement#getAttribute(java.lang.String, java.util.Hashtable, java.lang.String, boolean) getAttribute(String, Hashtable, String, boolean) see nanoxml.XMLElement#getStringAttribute(java.lang.String) getStringAttribute(String) see nanoxml.XMLElement#getStringAttribute(java.lang.String, java.lang.String) getStringAttribute(String, String) see nanoxml.XMLElement#getStringAttribute(java.lang.String, java.util.Hashtable, java.lang.String, boolean) getStringAttribute(String, Hashtable, String, boolean) see nanoxml.XMLElement#getIntAttribute(java.lang.String) getIntAttribute(String) see nanoxml.XMLElement#getIntAttribute(java.lang.String, int) getIntAttribute(String, int) see nanoxml.XMLElement#getIntAttribute(java.lang.String, java.util.Hashtable, java.lang.String, boolean) getIntAttribute(String, Hashtable, String, boolean) see nanoxml.XMLElement#getDoubleAttribute(java.lang.String) getDoubleAttribute(String) see nanoxml.XMLElement#getDoubleAttribute(java.lang.String, double) getDoubleAttribute(String, double) see nanoxml.XMLElement#getDoubleAttribute(java.lang.String, java.util.Hashtable, java.lang.String, boolean) getDoubleAttribute(String, Hashtable, String, boolean) see nanoxml.XMLElement#getBooleanAttribute(java.lang.String, java.lang.String, java.lang.String, boolean) getBooleanAttribute(String, String, String, boolean)

### removeProperty

public void removeProperty(String name)
Deprecated.
Use `removeAttribute` instead.
Removes an attribute.

Parameters:
  `name` - The name of the attribute.

### removeChild

public void removeChild(String name)
Deprecated.
Use `removeAttribute` instead.
Removes an attribute.

Parameters:
  `name` - The name of the attribute.

### createAnotherElement

protected XMLElement createAnotherElement()
Creates a new similar XML element.

You should override this method when subclassing XMLElement.

### setContent

public void setContent(String content)
Changes the content string.

Parameters:
  `content` - The new content string.

### setTagName

public void setTagName(String name)
Deprecated.
Use `setName` instead.
Changes the name of the element.

Parameters:
  `name` - The new name.

### setName

public void setName(String name)
Changes the name of the element.

Parameters:
  `name` - The new name.

Preconditions:
  - `name != null`
  - `name` is a valid XML identifier

see nanoxml.XMLElement#getName()

### toString

public String toString()
Writes the XML element to a string. see nanoxml.XMLElement#write(java.io.Writer) write(Writer)

Overrides:
  `toString` in class `Object`

### write

public void write(Writer writer) throws IOException
Writes the XML element to a writer.

Parameters:
  `writer` - The writer to write the XML data to.

Preconditions:
  - `writer != null`
  - `writer` is not closed

Throws:
  `IOException` - If the data could not be written to the writer. see nanoxml.XMLElement#toString()

### writeEncoded

protected void writeEncoded(Writer writer, String str) throws IOException
Writes a string encoded to a writer.

Parameters:
  `writer` - The writer to write the XML data to.
  `str` - The string to write encoded.

Preconditions:
  - `writer != null`
  - `writer` is not closed
  - `str != null`

Throws:
  `IOException`

### scanIdentifier

protected void scanIdentifier(StringBuffer result) throws IOException
Scans an identifier from the current reader. The scanned identifier is appended to `result`.

Parameters:
  `result` - The buffer in which the scanned identifier will be put.

Preconditions:
  - `result != null`
  - The next character read from the reader is a valid first character of an XML identifier.

Postconditions:
  - The next character read from the reader won't be an identifier character.

Throws:
  `IOException`

### scanWhitespace

protected char scanWhitespace() throws IOException
This method scans an identifier from the current reader.

Returns:
  the next character following the whitespace.
Throws:
  `IOException`

### scanWhitespace

protected char scanWhitespace(StringBuffer result) throws IOException
This method scans an identifier from the current reader. The scanned whitespace is appended to `result`.

Returns:
  the next character following the whitespace.

Preconditions:
  - `result != null`

Throws:
  `IOException`

### scanString

protected void scanString(StringBuffer string) throws IOException
This method scans a delimited string from the current reader. The scanned string without delimiters is appended to `string`.

Preconditions:
  - `string != null`
  - the next char read is the string delimiter

Throws:
  `IOException`

### scanPCData

protected void scanPCData(StringBuffer data) throws IOException
Scans a #PCDATA element. CDATA sections and entities are resolved. The next < char is skipped. The scanned data is appended to `data`.

Preconditions:
  - `data != null`

Throws:
  `IOException`

### checkCDATA

protected boolean checkCDATA(StringBuffer buf) throws IOException
Scans a special tag and if the tag is a CDATA section, append its content to `buf`.

Preconditions:
  - `buf != null`
  - The first < has already been read.

Throws:
  `IOException`

### skipComment

protected void skipComment() throws IOException
Skips a comment.

Preconditions:
  - The first <!-- has already been read.

Throws:
  `IOException`

### skipSpecialTag

protected void skipSpecialTag(int bracketLevel) throws IOException
Skips a special tag or comment.

Parameters:
  `bracketLevel` - The number of open square brackets ([) that have already been read.

Preconditions:
  - The first <! has already been read.
  - `bracketLevel >= 0`

Throws:
  `IOException`

### checkLiteral

protected boolean checkLiteral(String literal) throws IOException
Scans the data for literal text. Scanning stops when a character does not match or after the complete text has been checked, whichever comes first.

Parameters:
  `literal` - the literal to check.

Preconditions:
  - `literal != null`

Throws:
  `IOException`

### readChar

protected char readChar() throws IOException
Reads a character from a reader.

Throws:
  `IOException`

### scanElement

protected void scanElement(XMLElement elt) throws IOException
Scans an XML element.

Parameters:
  `elt` - The element that will contain the result.

Preconditions:
  - The first < has already been read.
  - `elt != null`

Throws:
  `IOException`

### resolveEntity

protected void resolveEntity(StringBuffer buf) throws IOException
Resolves an entity. The name of the entity is read from the reader. The value of the entity is appended to `buf`.

Parameters:
  `buf` - Where to put the entity value.

Preconditions:
  - The first & has already been read.
  - `buf != null`

Throws:
  `IOException`

### unreadChar

protected void unreadChar(char ch)
Pushes a character back to the read-back buffer.

Parameters:
  `ch` - The character to push back.

Preconditions:
  - The read-back buffer is empty.
  - `ch != '\0'`

### invalidValueSet

protected XMLParseException invalidValueSet(String name)
Creates a parse exception for when an invalid valueset is given to a method.

Parameters:
  `name` - The name of the entity.

Preconditions:
  - `name != null`

### invalidValue

protected XMLParseException invalidValue(String name, String value)
Creates a parse exception for when an invalid value is given to a method.

Parameters:
  `name` - The name of the entity.
  `value` - The value of the entity.

Preconditions:
  - `name != null`
  - `value != null`

### unexpectedEndOfData

protected XMLParseException unexpectedEndOfData()
Creates a parse exception for when the end of the data input has been reached.

### syntaxError

protected XMLParseException syntaxError(String context)
Creates a parse exception for when a syntax error occured.

Parameters:
  `context` - The context in which the error occured.

Preconditions:
  - `context != null`
  - `context.length() > 0`

### expectedInput

protected XMLParseException expectedInput(String charSet)
Creates a parse exception for when the next character read is not the character that was expected.

Parameters:
  `charSet` - The set of characters (in human readable form) that was expected.

Preconditions:
  - `charSet != null`
  - `charSet.length() > 0`

### unknownEntity

protected XMLParseException unknownEntity(String name)
Creates a parse exception for when an entity could not be resolved.

Parameters:
  `name` - The name of the entity.

Preconditions:
  - `name != null`
  - `name.length() > 0`