0

Dom4j は明らかに素晴らしいプロジェクトであり、2005 年以降は手を加えられていませんが、いまだに広く使用されています。

ただし、Node 実装の非互換性により、いくつかの問題が発生します。org.dom4jorg.w3c.dom、およびその他 ( と など) のorg.dom4j.Node間に名前の衝突がありorg.w3c.dom.Nodeます。

たとえば、私は<li><p>Some content</p></li>から何かを取り出して を取り除きたいと思って<p><li>ます<p>。だから私は試しました

    if( itemElm.getFirstChild().getNodeType() == Node.ELEMENT_NODE ){
        NodeList nodes = itemElm.getFirstChild().getChildNodes();
        //itemElm.removeChild( itemElm.getFirstChild() ); // No effect on error
        for( int i = 0; i < nodes.getLength(); i++ ) {
            itemElm.appendChild( nodes.item(i) );
        }
    }/**/

これは、C++、.Net、または Java から知っている他の実装でも機能します。しかし、Dom4j ではそうではありません:

// Cannot convert: org.dom4j.tree.DefaultText@275d595c [Text: "Some content."] into a W3C DOM Node

だから私は試しました

itemElm.add( DOMNodeHelper.asDOMNode( itemElm, nodes.item(i) ));

いいえ - 同じです。だから私は試しました:

DOMNodeHelper.appendChild( itemElm, nodes.item(i) ); // TODO: Could improve Dom4j.

それはだからappendChild(org.dom4j.Node, org.w3c.dom.Node)です。しかし、いいえ - 同じ結果です。

これをどのように解決すればよいですか?Dom4j でこれら 2 つの型セットを使用するにはどうすればよいですか? ありがとう。

コンテキスト: http://code.google.com/p/jtexy/source/browse/trunk/core/src/main/java/cz/dynawest/jtexy/modules/ListModule.java#380

4

1 に答える 1

0

DOM API を使用する場合、DOM4J を使用する理由はまったくありません。最新の xerces または JRE が提供するものを使用してください。

DOM4J などの別の API を使用する理由があるかもしれませんが、その場合は「ネイティブ」API のみを使用する必要があります。DOM4J の DOM アダプテーション レイヤーを本格的な作業に使用することは信頼できません。おっしゃる通り、2005年以降一切触れていません。

于 2012-12-16T22:17:58.467 に答える