使用从互联网复制的以下代码(由以前的开发人员 - 不是我)
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 文档并将它们合并为一个文档。
每个预先合并的文档都由顶部的 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 代码来编辑命名空间,但它将使用它来解决 2 个具有相同xmlns:url标签和不同 URL 的文档之间的命名空间冲突问题。
在当前世界中,合并文档的顶部确实有标题,如上所示。
然而,
当我通过顶部显示的代码运行文档以进行重命名时,它将 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 文档的任何格式?
或者
为什么它对我们合并的文档这样做?
任何帮助表示赞赏。