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 } }
basex-talk@mailman.uni-konstanz.de