我有一个org.dom4j.Document
实例,它是DefaultDocument实现的具体说明。我想在另一个节点之前插入一个新节点。我不太了解dom4j api,我对Element
和DOMElement
以及其他内容之间的区别感到困惑。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.dom4j
,org.dom4j.tree
,org.dom4j.io
和org.dom4j.xpath
软件包。