如何使用dom4j在另一个节点之前插入节点?

时间:2011-09-27 15:05:10

标签: java xml dom4j

我有一个org.dom4j.Document实例,它是一个特定的DefaultDocument实现。我想在另一个节点之前插入一个新节点。我不太了解dom4j api,我对ElementDOMElement之间的差异感到困惑。

org.dom4j.dom.DOMElement.insertBefore对我不起作用,因为我拥有的节点不是DOMElement。 DOMNodeHelper.insertBefore并不好,因为我有org.dom4j.Node个实例,而不是org.w3c.dom.Node个实例。 OMG。

你能给我一些代码片段给我这个工作吗?

这就是我现在所拥有的:

// puts lr's to the very end in the xml, but I'd like to put them before 'e'
for(Element lr : loopResult) {
  e.getParent().add(lr);
}

1 个答案:

答案 0 :(得分:11)

这是一个“老”的问题,但答案可能仍然是相关的。 DOM4J API的一个问题是有太多方法可以做同样的事情;太多的便利方法,你无法看到树木的森林。在你的情况下,你应该获得一个子元素列表并将你的元素插入所需的位置:像这样(未经测试):

// get a list of e's sibling elements, including e
List elements = e.getParent().elements();
// insert new element at e' position, i.e. before e
elements.add(elements.indexOf(e), lr);

DOM4J中的列表是实时列表,即变异列表操作会影响文档树,反之亦然

作为旁注,DOMElement和org.dom4j.dom中的所有其他类都是DOM4J实现,它也支持w3c DOM API。这很少需要(我不会把它和一堆其他“深奥”的包装,如bean,datatype,jaxb,swing等,在同一个分发单元中)。专注于核心org.dom4jorg.dom4j.treeorg.dom4j.ioorg.dom4j.xpath包。