Java:从元素而不是文档创建 DOM 元素

2022-09-03 13:09:15

如您所知,在Java中创建Dom元素的正确方法是做这样的事情。

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 的上下文,为什么我不能从元素创建另一个元素呢?这肯定会简化我的设计,而不必到处都保留对文档的引用。


答案 1

Element 扩展 Node,Node 定义 getOwnerDocument,所以你可以做这样的事情:

e2 = e.getOwnerDocument().createElement("tag");

http://java.sun.com/j2se/1.5.0/docs/api/org/w3c/dom/Node.html#getOwnerDocument()


答案 2

我花了太长时间在W3C DOM中解决文档的这个问题。所有者文档的概念也作为工厂(createElement(...))是有限制的。如果您不需要使用W3C DOM,我将更改为开源XOM(http://www.xom.nu)。这比W3C更简单,更灵活(例如,您可以子类元素,文档只有一个次要角色)。XOM 不需要文档,除非您要序列化。有一件事会立即变得更简单,那就是在不同的树之间移动元素。