6

org.dom4j.Document具体的には DefaultDocument の実装であるインスタンスがあります。別のノードの直前に新しいノードを挿入したいと思います。私は dom4j API をよく理解していません。ElementDOMElementと の違いがわかりません。

org.dom4j.dom.DOMElement.insertBefore私が持っているノードはDOMElementではないため、私にとってはうまくいきません。インスタンスではなくインスタンスDOMNodeHelper.insertBeforeがあるため、良くありません。ああ、神様。org.dom4j.Nodeorg.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 の問題の 1 つは、同じことを行う方法が多すぎることです。木を見て森を見ることができないという効果を持つ便利なメソッドが多すぎます。あなたの場合、子要素のリストを取得し、目的の位置に要素を挿入する必要があります: このようなもの (テストされていません):

// 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は、w3c DOM API もサポートする DOM4J 実装です。これが必要になることはめったにありません (同じディストリビューション ユニットに、bean、datatype、jaxb、swing などの他の「難解な」パッケージの束を配置することはありませんでした)。org.dom4jコア、org.dom4j.treeorg.dom4j.ioおよび org.dom4j.xpathパッケージに集中します。

于 2011-10-09T20:52:45.413 に答える