6

我有一个org.dom4j.Document具体的 DefaultDocument 实现的实例。我想在另一个节点之前插入一个新节点。我不太了解 dom4j api,我对ElementandDOMElement和东西之间的区别感到困惑。

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

1 回答 1

14

这是一个“老”问题,但答案可能仍然相关。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.dom4j、、org.dom4j.treeorg.dom4j.ioorg.dom4j.xpath

于 2011-10-09T20:52:45.413 回答