Ответ 1
Элемент расширяет Node, а Node определяет getOwnerDocument, поэтому вы можете сделать что-то вроде этого:
e2 = e.getOwnerDocument().createElement("tag");
http://java.sun.com/j2se/1.5.0/docs/api/org/w3c/dom/Node.html#getOwnerDocument()
Как вы знаете, правильный способ создания элемента Dom в Java - это сделать что-то вроде этого.
import org.w3c.dom.Document;
import org.w3c.dom.Element;
Document d;
Element e;
e = d.createElement("tag");
Вам нужно использовать d для генерации элемента, потому что ему нужен контекст документа. (Я не на 100% уверен, почему, но, возможно, недоразумение, это часть моей проблемы)
Я не понимаю, почему вы не можете сделать что-то вроде этого
Element e;
Element e2;
e2 = e.createElement("anothertag");
Так как e уже имеет контекст d, почему я не могу создать другой элемент из элемента? Это, безусловно, упростит мой дизайн, не имея необходимости постоянно ссылаться на документ.
Элемент расширяет Node, а Node определяет getOwnerDocument, поэтому вы можете сделать что-то вроде этого:
e2 = e.getOwnerDocument().createElement("tag");
http://java.sun.com/j2se/1.5.0/docs/api/org/w3c/dom/Node.html#getOwnerDocument()
Я слишком долго боролся с этой проблемой документа в W3C DOM. Концепция документа владельца также как factory (createElement (...)) ограничивает. Если вам не требуется использовать W3C DOM, я бы переключился на Open Source XOM (http://www.xom.nu). Это было разработано, чтобы быть более простым и гибким, чем W3C (например, вы можете подклассировать элемент и документ только второстепенную роль). XOM не требует документа, если вы не хотите сериализовать. Одна вещь, которая сразу же упрощается, заключается в перемещении элементов вокруг разных деревьев.