in xstream/src/java/com/thoughtworks/xstream/io/xml/StaxWriter.java [165:211]
public void startNode(final String name) {
try {
final QName qname = qnameMap.getQName(encodeNode(name));
final String prefix = qname.getPrefix();
final String uri = qname.getNamespaceURI();
// before you ask - yes it really is this complicated to output QNames to StAX
// handling both repair namespace modes :)
final boolean hasPrefix = prefix != null && prefix.length() > 0;
final boolean hasURI = uri != null && uri.length() > 0;
boolean writeNamespace = false;
if (hasURI) {
if (hasPrefix) {
final String currentNamespace = out.getNamespaceContext().getNamespaceURI(prefix);
if (currentNamespace == null || !currentNamespace.equals(uri)) {
writeNamespace = true;
}
} else {
final String defaultNamespace = out.getNamespaceContext().getNamespaceURI("");
if (defaultNamespace == null || !defaultNamespace.equals(uri)) {
writeNamespace = true;
}
}
}
out.writeStartElement(prefix, qname.getLocalPart(), uri);
if (hasPrefix) {
out.setPrefix(prefix, uri);
} else if (hasURI) {
if (writeNamespace) {
out.setDefaultNamespace(uri);
}
}
if (hasURI && writeNamespace && !isNamespaceRepairingMode()) {
if (hasPrefix) {
out.writeNamespace(prefix, uri);
} else {
out.writeDefaultNamespace(uri);
}
}
tagDepth++;
} catch (final XMLStreamException e) {
throw new StreamException(e);
}
}