我有一个org.dom4j.Document实例,它是DefaultDocument实现的具体说明。我想在另一个节点之前插入一个新节点。我不太了解dom4j api,我对ElementDOMElement以及其他内容之间的区别感到困惑。
org.dom4j.dom.DOMElement.insertBefore对我不起作用,因为我拥有的节点不是DOMElement。 DOMNodeHelper.insertBefore也不好,因为我有org.dom4j.Node实例而不是org.w3c.dom.Node实例。我的天啊。

您能给我一个能帮助我完成此工作的代码片段吗?

这就是我现在所拥有的:

// 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);
}

最佳答案

这是一个“老”问题,但答案可能仍然很重要。 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,数据类型,jaxb,swing等放在同一分发单元中)。专注于核心org.dom4jorg.dom4j.treeorg.dom4j.ioorg.dom4j.xpath软件包。

09-11 05:50