Example usage for org.w3c.dom Attr appendChild

List of usage examples for org.w3c.dom Attr appendChild

Introduction

In this page you can find the example usage for org.w3c.dom Attr appendChild.

Prototype

public Node appendChild(Node newChild) throws DOMException;

Source Link

Document

Adds the node newChild to the end of the list of children of this node.

Usage

From source file:org.apache.ode.il.OMUtils.java

@SuppressWarnings("unchecked")
public static Element toDOM(OMElement element, Document doc, boolean deepNS) {
    ///*from w  w w .j  a va  2s.  co  m*/
    //  Fix regarding lost qnames on response of invoke activity:
    //    * copy an element including its prefix.
    //    * add all namespase attributes.
    //
    String domElementNsUri = element.getQName().getNamespaceURI();
    String domElementQName;
    if (element.getQName().getPrefix() == null || element.getQName().getPrefix().trim().length() == 0) {
        domElementQName = element.getQName().getLocalPart();
    } else {
        domElementQName = element.getQName().getPrefix() + ":" + element.getQName().getLocalPart();
    }
    if (__log.isTraceEnabled())
        __log.trace("toDOM: creating element with nsUri=" + domElementNsUri + " qname=" + domElementQName
                + " from omElement, name=" + element.getLocalName());

    final Element domElement = doc.createElementNS(domElementNsUri, domElementQName);

    if (deepNS) {
        NSContext nscontext = new NSContext();
        buildNScontext(nscontext, element);
        DOMUtils.injectNamespacesWithAllPrefixes(domElement, nscontext);
    } else {
        if (element.getAllDeclaredNamespaces() != null) {
            for (Iterator<OMNamespace> i = element.getAllDeclaredNamespaces(); i.hasNext();) {
                OMNamespace omns = i.next();
                if (omns.getPrefix().equals(""))
                    domElement.setAttributeNS(DOMUtils.NS_URI_XMLNS, "xmlns",
                            omns.getNamespaceURI() == null ? "" : omns.getNamespaceURI());
                else
                    domElement.setAttributeNS(DOMUtils.NS_URI_XMLNS, "xmlns:" + omns.getPrefix(),
                            omns.getNamespaceURI());
            }

        }
    }
    if (__log.isTraceEnabled())
        __log.trace("toDOM: created root element (deepNS=" + deepNS + "): " + DOMUtils.domToString(domElement));

    for (Iterator i = element.getAllAttributes(); i.hasNext();) {
        final OMAttribute attr = (OMAttribute) i.next();
        Attr newAttr;
        if (attr.getNamespace() != null)
            newAttr = doc.createAttributeNS(attr.getNamespace().getNamespaceURI(), attr.getLocalName());
        else
            newAttr = doc.createAttributeNS(null, attr.getLocalName());

        newAttr.appendChild(doc.createTextNode(attr.getAttributeValue()));
        domElement.setAttributeNodeNS(newAttr);

        // Case of qualified attribute values, we're forced to add corresponding namespace declaration manually...
        int colonIdx = attr.getAttributeValue().indexOf(":");
        if (colonIdx > 0) {
            OMNamespace attrValNs = element.findNamespaceURI(attr.getAttributeValue().substring(0, colonIdx));
            if (attrValNs != null)
                domElement.setAttributeNS(DOMUtils.NS_URI_XMLNS, "xmlns:" + attrValNs.getPrefix(),
                        attrValNs.getNamespaceURI());
        }
    }

    for (Iterator<OMNode> i = element.getChildren(); i.hasNext();) {
        OMNode omn = i.next();

        switch (omn.getType()) {
        case OMNode.CDATA_SECTION_NODE:
            domElement.appendChild(doc.createCDATASection(((OMText) omn).getText()));
            break;
        case OMNode.TEXT_NODE:
            domElement.appendChild(doc.createTextNode(((OMText) omn).getText()));
            break;
        case OMNode.ELEMENT_NODE:
            domElement.appendChild(toDOM((OMElement) omn, doc, false));
            break;
        }

    }

    return domElement;

}