我有一个org.dom4j.Document
实例,它是一个特定的DefaultDocument实现。我想在另一个节点之前插入一个新节点。我不太了解dom4j api,我对Element
和DOMElement
之间的差异感到困惑。
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);
}
答案 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.dom4j
,org.dom4j.tree
,org.dom4j.io
和org.dom4j.xpath
包。