public void startNode()

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);
        }
    }