XmlCursor コンテンツを DOM ドキュメントに挿入する方法
質問
一部の API は、XML ドキュメントのルートを指す XmlCursor を返します。これらすべてを別の org.w3c.DOM で表現されたドキュメントに挿入する必要があります。
開始時:XmlCursor がポイントしている
<a>
<b>
some text
</b>
</a>
DOM ドキュメント:
<フー>
</foo>
最後に、元の DOM ドキュメントを次のように変更したいと思います。
<フー>
<someOtherInsertedElement>
u003Ca>u003Cb>いくつかのテキストu003C/b>u003C/a>
</someOtherInsertedElement>
</foo>
注記: document.importNode(cursor.getDomNode())
機能しません - 例外がスローされます: NOT_SUPPORTED_ERR:実装は、要求されたタイプのオブジェクトまたは操作をサポートしていません。
解決
次のようなことを試してください。
Node originalNode = cursor.getDomNode();
Node importNode = document.importNode(originalNode.getFirstChild());
Node otherNode = document.createElement("someOtherInsertedElement");
otherNode.appendChild(importNode);
document.appendChild(otherNode);
つまり、言い換えると次のようになります。
- カーソルから DOM ノードを取得します。この場合、これは DOMDocument であるため、getFirstChild() を実行してルート ノードを取得します。
- それを DOMDocument にインポートします。
- DOMDocument を使用して他の作業を行います。
- インポートしたノードを右のノードに追加します。
インポートする理由は、ノードが常に特定の DOMDocument に「属する」ためです。元のノードを追加するだけでは例外が発生します。
他のヒント
私も同じ問題を抱えていました。
これは失敗していました:
Node importNode = document.importNode(originalNode);
これにより問題が解決されました。
Node importNode = document.importNode(originalNode.getFirstChild());
所属していません StackOverflow