这是我的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属性。知道如何解决它吗?
答案 0 :(得分:2)
命名空间声明只有很小的变化,这里是修改后的xslt
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="urn:jboss:domain:3.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="//*:socket-binding-group">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
<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>