2011-09-27 143 views
3

我有一個org.dom4j.Document實例,它是一個DefaultDocument實現是特定的。我想在另一個之前插入一個新節點。我真的不明白dom4j API,我很困惑ElementDOMElement和東西之間的差異。如何使用dom4j在其他節點之前插入節點?

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); 
} 
+0

什麼是變量e?你能否提供更多的上下文 – peshkira

+0

...還有,有一種方法可以根據一些屬性或它們攜帶的數據對元素進行排序。例如,你可以使用org.dom4j.DocumentHelper.sort(列表節點,字符串表達式) – peshkira

+0

片段中提到的變量'e'也是一個元素,它和它的父類沒有什麼特別之處。 'e.getParent()'只是一個通用元素,更具體地說就是我的xml樹中的一個節點。 – jabal

回答

9

這是一個「老」的問題,但答案可能仍然是相關的。 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.ioorg.dom4j.xpath包。

相關問題