0

使用从互联网复制的以下代码(由以前的开发人员 - 不是我)

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 文档的任何格式?

或者

为什么它对我们合并的文档这样做?

任何帮助表示赞赏。

4

0 回答 0