// Do not change the current element state yet.
// This only happens in endElement().
if (rawName == null || rawName.length() == 0) {
if (localName == null) {
String msg = DOMMessageFormatter.formatMessage(DOMMessageFormatter.SERIALIZER_DOMAIN, "NoName", null);
throw new SAXException(msg);
}
if (namespaceURI != null && ! namespaceURI.equals( "" )) {
String prefix;
prefix = getPrefix( namespaceURI );
if (prefix != null && prefix.length() > 0)
rawName = prefix + ":" + localName;
else
rawName = localName;
} else
rawName = localName;
addNSAttr = true;
}
_printer.printText( '<' );
_printer.printText( rawName );
_printer.indent();
// For each attribute print it's name and value as one part,
// separated with a space so the element can be broken on
// multiple lines.
if (attrs != null) {
for (i = 0 ; i < attrs.getLength() ; ++i) {
_printer.printSpace();
name = attrs.getQName( i );
if (name != null && name.length() == 0) {
String prefix;
String attrURI;
name = attrs.getLocalName( i );
attrURI = attrs.getURI( i );
if (( attrURI != null && attrURI.length() != 0 ) &&
( namespaceURI == null || namespaceURI.length() == 0 ||
! attrURI.equals( namespaceURI ) )) {
prefix = getPrefix( attrURI );
if (prefix != null && prefix.length() > 0)
name = prefix + ":" + name;
}
}
value = attrs.getValue( i );
if (value == null)
value = "";
_printer.printText( name );
_printer.printText( "=\"" );
printEscaped( value );
_printer.printText( '"' );
// If the attribute xml:space exists, determine whether
// to preserve spaces in this and child nodes based on
// its value.
if (name.equals( "xml:space" )) {
if (value.equals( "preserve" ))
preserveSpace = true;
else
preserveSpace = _format.getPreserveSpace();
}
}
}
if (_prefixes != null) {
Enumeration keys;
keys = _prefixes.keys();
while (keys.hasMoreElements()) {
_printer.printSpace();
value = (String) keys.nextElement();
name = (String) _prefixes.get( value );
if (name.length() == 0) {
_printer.printText( "xmlns=\"" );
printEscaped( value );
_printer.printText( '"' );
} else {
_printer.printText( "xmlns:" );
_printer.printText( name );
_printer.printText( "=\"" );
printEscaped( value );
_printer.printText( '"' );
}
}
}
// Now it's time to enter a new element state
// with the tag name and space preserving.
// We still do not change the curent element state.
state = enterElementState( namespaceURI, localName, rawName, preserveSpace );
name = ( localName == null || localName.length() == 0 ) ? rawName : namespaceURI + "^" + localName;
state.doCData = _format.isCDataElement( name );
state.unescaped = _format.isNonEscapingElement( name );
} catch (IOException except) {
throw new SAXException( except );
}
}