code: public synchronized void addAttribute(String aName, String aValue) throws IOException {
  		// reject modification of already closed node
  		if(isOpen==false) {
  			throw new IOException("Attempted to add attribute '" + aName + "' to already closed tag '" + name + "'!");
  		}
  		// check for sane input
  		if((aName==null) || 
  				(aValue==null) || 
  				(aName.trim().length()==0) || 
  				(aValue.trim().length()==0)) {
  			return;	// reject unnecessary attributes
  		}
  		// add attributes
  		if(lastChildNode==null) {
  			// encode and write attribute
  			aName = aName.trim();
  			aValue = SXmlCharacterMethods.convertCharsToXml(aValue.trim());
  			writer.write(" " + aName + "=\"" + aValue + "\"");
  		} else {
  			// usage contract broken! (no adding of attributes after adding first child node)
  			throw new IOException("No attributes can be added to a node "
  					+ "after the first child has been added! ('" + name + "')");
  		}
  	}
docs: Adds an attribute to this tag node.
  Will result in something like: <code><i>aName</i>=<i>aValue</i></code>
  <b>WARNING:</b>
  <ul>
  <li>Attributes must be added immediately after creation of a tag, i.e.:</li>
  <li>All attributes must have been added <b>before</b> adding the first child node.</li>
  </ul>
  
  @param aName Name, i.e. key, of this attribute
  @param aValue Value of this attribute