private void renderXMLElement()

in nbxml/src/main/java/org/apache/vysper/xml/fragment/Renderer.java [64:115]


    private void renderXMLElement(XMLElement element, ResolverNamespaceResolver nsResolver,
            StringBuilder openElementBuffer, StringBuilder elementContentBuffer, StringBuilder closeElementBuffer) {
        nsResolver.push(element);

        openElementBuffer.append("<");
        renderElementName(openElementBuffer, element, nsResolver);

        // render namespace declarations
        Map<String, String> nsAttrs = nsResolver.getNamespaceDeclarations();
        for (Entry<String, String> nsAttr : nsAttrs.entrySet()) {
            openElementBuffer.append(" ");
            String name;
            if (nsAttr.getKey().length() == 0) {
                name = "xmlns";
            } else {
                name = "xmlns:" + nsAttr.getKey();
            }
            renderAttribute(openElementBuffer, name, nsAttr.getValue());
        }

        for (Attribute attribute : element.getAttributes()) {
            // make sure we do not render namespace attributes,
            // nor normal attributes containing namespace declarations (probably due to
            // the parser not correctly creating namespace attributes for these which are then 
            // copied into for example error responses)

            if (!attribute.getName().startsWith("xmlns")) {
                openElementBuffer.append(" ");
                renderAttribute(openElementBuffer, attribute, nsResolver);
            }
        }
        openElementBuffer.append(">");
        for (XMLFragment xmlFragment : element.getInnerFragments()) {
            if (xmlFragment instanceof XMLElement) {
                renderXMLElement((XMLElement) xmlFragment, nsResolver, elementContentBuffer, elementContentBuffer,
                        elementContentBuffer);
            } else if (xmlFragment instanceof XMLText) {
                elementContentBuffer.append(escapeTextValue(((XMLText) xmlFragment).getText()));
            } else if(xmlFragment == null) {
                // ignore
            } else {
                throw new UnsupportedOperationException("cannot render XML fragment of type "
                        + xmlFragment.getClass().getName());
            }
        }

        closeElementBuffer.append("</");
        renderElementName(closeElementBuffer, element, nsResolver);
        closeElementBuffer.append(">");
        // remove this element from the NS resolver stack
        nsResolver.pop();
    }