Java Dom4j:节点实现不兼容
Dom4j显然是一个很棒的项目,自2005年以来就没有人接触过它,但它仍然被广泛使用 但是,节点实现的不兼容性给我带来了一些问题。Java Dom4j:节点实现不兼容,java,xml,dom4j,incompatibility,Java,Xml,Dom4j,Incompatibility,Dom4j显然是一个很棒的项目,自2005年以来就没有人接触过它,但它仍然被广泛使用 但是,节点实现的不兼容性给我带来了一些问题。org.dom4j、org.w3c.dom和其他名称之间存在名称冲突,例如org.dom4j.Node和org.w3c.dom.Node 例如,我有一些内容,想从到提取任何内容,并摆脱。所以我试过了 if( itemElm.getFirstChild().getNodeType() == Node.ELEMENT_NODE ){ NodeLis
org.dom4j
、org.w3c.dom
和其他名称之间存在名称冲突,例如org.dom4j.Node
和org.w3c.dom.Node
例如,我有一些内容
,想从到提取任何内容,并摆脱。所以我试过了
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) );
}
}/**/
itemElm.add( DOMNodeHelper.asDOMNode( itemElm, nodes.item(i) ));
所以我试过了
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) );
}
}/**/
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中使用这两种类型集?谢谢
上下文:如果要使用DOM api,绝对没有理由使用DOM4J;使用最新的Xerce或JRE提供的Xerce
可能有理由使用另一个API,例如DOM4J,但是只应使用“本机”API。我不相信DOM4J中的DOM适配层可以完成任何严肃的工作;正如您所说,自2005年以来就没有人接触过它。这就是问题所在-我使用本机api,但它在某个地方泄漏了W3C DOM类型,而在其他地方需要Dom4j类型。没有明显的选择。你说的“泄露W3CDOM类型”是什么意思?如果您不使用org.dom4j.dom
包中的任何内容,您将永远不会看到任何W3C dom类型。我明白了,可能是我的应用程序的代码泄漏了这些类型:)我会检查一下。它为什么会有这样的impl绑定?在slf4j风格中,它是否试图像几个DOM API的门面一样工作?DOM4J接近于非常好,但它自身的便利性不足;做同一件事的方法太多了;而创始人,实施者,显然在完成90%时失去了注意力。没关系,但是如果你在边缘使用了任何东西,你就只能靠自己了。