インターネットからコピーされた次のコードを使用します(私ではなく、以前の開発者によって)
import java.util.ListIterator;
import org.dom4j.Element;
import org.dom4j.Namespace;
import org.dom4j.QName;
import org.dom4j.VisitorSupport;
class DoNamespaceChange extends VisitorSupport
{
private Namespace from;
private Namespace to;
public DoNamespaceChange(Namespace from, Namespace to)
{
this.from = from; this.to = to;
}
public void visit(Element node)
{
Namespace ns = node.getNamespace();
if (ns.getURI().equals(from.getURI()))
{
QName newQName = new QName(node.getName(), to);
node.setQName(newQName);
}
ListIterator<?> namespaces = node.additionalNamespaces().listIterator();
while (namespaces.hasNext())
{
Namespace additionalNamespace = (Namespace) namespaces.next();
if (additionalNamespace.getURI().equals(from.getURI()))
{
namespaces.remove();
}
}
}
}
マージ プロセス中に XML タグ (実際には XBRL) の属性の名前を変更しようとしています。マージ プロセスは 2 つの XBRL ドキュメントを取得し、それらを 1 つのドキュメントにマージします。
マージ前の各ドキュメントは、先頭に xmlns タグを付けて形成され、宣言にグローバル スコープを与えます。
各ドキュメントの上部には、このヘッダー ブロック (または同様のもの) があります。
<xbrli:xbrl
xmlns:xbrli="http://www.url.com/"
xmlns:ab-CD="http://www.url.co.uk/"
xmlns:ef-GH="http://www.url.com/"
xmlns:ab-XYZ="http://www.url.com/"
xmlns:ur-ACE="http://www.url.co.uk/">
次に、関連するセクションが人間が読みやすい形式でこの下にリストされます。
私たちのマージ コードは現在、名前空間を編集するために上記の Java コードを使用していませんが、 URL が異なる同じxmlns:urlタグを持つ 2 つのドキュメント間の名前空間衝突の問題を修正するために使用する予定です。
現在の世界では、マージされたドキュメントには、上記のように上部にヘッダーがあります。
でも、
上部に示されているコードを使用してドキュメントを実行すると、名前の変更を行うために、xmlns タグが関連するセクション自体に移動されます (スコープ)。タグの名前を変更して、新しいドキュメントにマージできるようにします。マージされたドキュメントのサンプルを以下に示します。
<c_xbrli:xbrl
xmlns:c_xbrli="http://www.url.com"
xmlns:a_xbrli="http://www.url.com">
<c_link:schemaRef
xmlns:c_link="http://www.url.com"
xmlns:xlink="http://www.url.com"
xlink:href="http://www.url.com"
xlink:type="simple"></c_link:schemaRef>
<a_link:schemaRef
xmlns:a_link="http://www.url.com"
xmlns:xlink="http://www.url.com"
xlink:href="http://www.url.com"
xlink:type="simple"></a_link:schemaRef>
注意してください: これは仕事上の問題であるため、データを匿名にする必要があるため、URL は無視してください :)
また、注意してください: 名前が変更されたタグには、a_ と c_ のプレフィックスが付いています。これは、名前変更コードが設計されているため、ここでは問題ありません。タグのドキュメントに配置するだけで
長々と申し訳ありませんが、一言で言えば、dom4j を通過して新しいドキュメントへの名前変更を行うときに、元の XML ドキュメントから任意の種類のフォーマットを保持できるかどうかだけを知りたいのですが?
また
マージされたドキュメントに対してこれを行うのはなぜですか?
どんな助けでも大歓迎です。