如何正确使用org.w3c.xml.Document #importNode

时间:2014-04-26 23:16:07

标签: java xml

请注意,SOAPHeader扩展了Node和Element接口:

 Document docToAppend= getDoc();
 final SOAPHeader soapHeader = getSoapHeader();
 final Node importNode = soapHeader.getOwnerDocument().importNode(docToAppend.cloneNode(true), true);
 soapHeader.appendChild(importNode);

即。我想将docToAppend追加到soapHeader节点。

但它失败了,例外:

  

引起:org.w3c.dom.DOMException:NOT_SUPPORTED_ERR:The   实现不支持所请求的对象类型或   操作

我认为我的代码不正确。

2 个答案:

答案 0 :(得分:5)

有同样的错误NOT_SUPPORTED_ERR。

DOMResult dom = new DOMResult(); 
getTransformer().transform(new StAXSource(xmlr), dom);
Node node = dom.getNode();
document.appendChild(document.importNode(node, true));  // <---- Error

原因

通过检查节点的类型,发现尝试添加文档而不是元素。

System.out.println("Node type is [" + dom.getNode().getNodeType() + "]");
----
Node type is [9]  <---- DOCUMENT_NODE

修复

获取文档节点的第一个子节点。

node = dom.getNode().getFirstChild();
System.out.println("Node type is [" + node.getNodeType() + "]");
document.appendChild(document.importNode(node, true));
----
Node type is 1 <---- ELEMENT_NODE

参考

DOCUMENT_NODE和ELEMENT_NODE值在JAVA API Constant Field Values中指定。

答案 1 :(得分:1)

SOAPHeader对象只能将SOAPHeaderElement对象作为其直接子对象。