Java 使用XSLT复制时删除XML命名空间

Java 使用XSLT复制时删除XML命名空间,java,xml,xslt,Java,Xml,Xslt,这是我的XSLT: <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:urn="urn:jboss:domain:3.0"> <xsl:output method="xml" indent="yes"/> <xsl:template match="//urn:soc

这是我的XSLT:

<xsl:stylesheet version="2.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:urn="urn:jboss:domain:3.0">

    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="//urn:socket-binding-group">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
            <urn:socket-binding name="https" port="${{jboss.https.port:8443}}"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

我要转换此XML文件:

<server xmlns="urn:jboss:domain:3.0">
    <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
        <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
    </socket-binding-group>
</server>

如:

<server xmlns="urn:jboss:domain:3.0">
    <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
        <socket-binding name="https" port="${jboss.https.port:8443}"/>
        <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
    </socket-binding-group>
</server>

但这种转变的结果是:

<server xmlns="urn:jboss:domain:3.0">
    <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
        <urn:socket-binding xmlns:urn="urn:jboss:domain:3.0" name="https" port="${jboss.https.port:8443}"/>
        <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
    </socket-binding-group>
</server>


它有一些额外的xmlns属性。知道如何修复它吗?

名称空间声明中只有一个小的更改,下面是修改后的xslt



谢谢。但是我也能知道原因吗?如前所述,使用默认名称空间。从
xmlns:urn=“urn:jboss:domain:3.0”更改为
xmlns=“urn:jboss:domain:3.0”
,从而避免了显式命名空间。还有从
的细微变化。从
更改为
关键是,对于样式表中的文本结果元素(如套接字绑定),范围内的命名空间绑定(前缀和URI)从样式表中复制。如果使用xsl:copy创建具有(p1=uri1)命名空间绑定的元素,并使用literal result元素创建具有(p2=uri1)命名空间绑定的元素,那么最终将得到一个结果文档,该文档有两个命名空间前缀p1和p2都绑定到相同的URI uri1。