Dear Christian,

I've no idea why DOM/LS still doesn't work, but with the SAXSerializer the problem is no more. When the SAXSerialier works query result can easily converted into any DOM using a simple ContentHandler implementation:


/**
 * Constructs a DOM from SAX events.
 * Original idea by Florent Georges.
 */
public class SaxToDomHandler implements ContentHandler
{
        private final DocumentBuilder documentBuilder;

        private Document document;
        private Node current;

        public SaxToDomHandler(DocumentBuilder documentBuilder)
        {
                this.documentBuilder = documentBuilder;
        }
       
        /**
         * Returns the created document.
         */
        public Document getDocument()
        {
                return document;
        }

        @Override
        public void startDocument() throws SAXException
        {
                document = documentBuilder.newDocument();
                current = document;
        }

        @Override
        public void startElement(String uri, String name, String qName, Attributes attrs)
        {
                Element element = document.createElementNS(uri, qName);

                for (int i = 0; i < attrs.getLength(); i++)
                {
                        String nsURI = attrs.getURI(i);
                        String qname = attrs.getQName(i);
                        String value = attrs.getValue(i);

                        Attr attr = document.createAttributeNS(nsURI, qname);
                        attr.setValue(value);
                        element.setAttributeNodeNS(attr);
                }

                current.appendChild(element);
                current = element;
        }

        @Override
        public void endElement(String uri, String name, String qName)
        {
                current = current.getParentNode();
        }

        @Override
        public void endDocument() throws SAXException
        {
                current = current.getOwnerDocument();
        }

        @Override
        public void characters(char[] ch, int start, int length)
        {
                String string = new String(ch, start, length);
                current.appendChild(document.createTextNode(string));
        }

        @Override
        public void ignorableWhitespace(char[] ch, int start, int length)
        {
                characters(ch, start, length);
        }

        @Override
        public void processingInstruction(String target, String data)
        {
                current.appendChild(document.createProcessingInstruction(target, data));
        }

        @Override
        public void setDocumentLocator(Locator locator)
        {
                //NOP
        }

        @Override
        public void startPrefixMapping(String prefix, String uri) throws SAXException
        {
                //NOP
        }

        @Override
        public void endPrefixMapping(String prefix) throws SAXException
        {
                //NOP
        }

        @Override
        public void skippedEntity(String name) throws SAXException
        {
                //NOP
        }
}