Java 使用XSLT复制时删除XML命名空间
这是我的XSLT: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
<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。