0
Вот мой XSLT:Remove пространства имен XML при копировании с помощью 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. Любая идея, как я могу это исправить?
Спасибо. Но могу ли я узнать причину? – user1079877
Как упоминалось, используя пространство имен по умолчанию. Изменено из 'xmlns: urn =" urn: jboss: domain: 3.0 "' to 'xmlns =" urn: jboss: domain: 3.0 "', что позволяет избежать этого явного пространства имен. Также незначительные изменения от '' to ''. И измените из ' ' to '<имя сокета-связывания =" https "port =" $ { {jboss.https.port: 8443}} "/>' –
Rao
Главное, что для литеральных элементов результата в таблице стилей (например, сокет-привязка) привязки пространства имен в пространстве (оба префикса и URI) копируются из таблицы стилей , Если вы используете xsl: copy для создания элемента с привязкой пространства имен (p1 = uri1) и используйте литеральный результирующий элемент для создания элемента с привязкой пространства имен (p2 = uri1), тогда вы получите документ результата, который имеет два префикса пространства имен p1 и p2, оба связанные с тем же URI uri1. –