У вас есть шаблон, который удаляет пространства имен из элементов
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
Это означает, что когда вы устанавливаете параметр changeLogContent
следующим образом ...
<xsl:with-param name="changeLogContent">
<xsl:apply-templates select="$coreTablesVariable"/>
<xsl:apply-templates select="$coreSequencesVariable"/>
<xsl:apply-templates select="$coreIndexesVariable"/>
<xsl:apply-templates select="$coreForeignConstraintsVariable"/>
<xsl:apply-templates select="$coreViewsVariable"/>
</xsl:with-param>
...Он будет использовать этот шаблон, и поэтому он будет установлен на копии узла без пространств имен.
Во-первых, вам нужно изменить xsl:with-param
на это, чтобы выбрать исходные узлы, а не создавать копии ...
<xsl:with-param name="changeLogContent" select="$coreTablesVariable,$coreSequencesVariable,$coreIndexesVariable,$coreForeignConstraintsVariable,$coreViewsVariable"/>
Затем, в createChangeLog
, если вы действительно хотите копировать узлы без изменений, используйте xsl:copy-of
вместо xsl:apply-templates
(потому что xsl:apply-templates
будет просто соответствовать удалению пространства именшаблон снова.
<xsl:copy-of select="$changeLogContent"/>
Попробуйте использовать эти два шаблона вместо
<xsl:template match="databaseChangeLog">
<!-- CORE-->
<xsl:comment>CORE TABLES</xsl:comment>
<xsl:variable name="coreTablesVariable" select="changeSet[createTable/@tableName=$coreTables]"/>
<xsl:apply-templates select="$coreTablesVariable"/>
<xsl:comment>CORE SEQUENCES</xsl:comment>
<xsl:variable name="coreSequencesVariable" select="changeSet[createSequence[starts-with(@sequenceName, 'SEQ_') and substring-after(@sequenceName, 'SEQ_') = $coreTables]]"/>
<xsl:apply-templates select="$coreSequencesVariable"/>
<xsl:comment>CORE INDEXES</xsl:comment>
<xsl:variable name="coreIndexesVariable" select="changeSet[createIndex/@tableName=$coreTables]"/>
<xsl:apply-templates select="$coreIndexesVariable"/>
<xsl:comment>CORE FOREIGN CONSTRAINTS</xsl:comment>
<xsl:variable name="coreForeignConstraintsVariable" select="changeSet[addForeignKeyConstraint/@baseTableName=$coreTables]"/>
<xsl:apply-templates select="$coreForeignConstraintsVariable"/>
<xsl:comment>CORE VIEWS</xsl:comment>
<xsl:variable name="coreViewsVariable" select="changeSet[createView/@viewName=$coreTables]"/>
<xsl:apply-templates select="$coreViewsVariable"/>
<xsl:call-template name="createChangeLog">
<xsl:with-param name="outputFile" select="'core-changelog.xml'"/>
<xsl:with-param name="changeLogContent" select="$coreTablesVariable,$coreSequencesVariable,$coreIndexesVariable,$coreForeignConstraintsVariable,$coreViewsVariable"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="createChangeLog">
<xsl:param name="outputFile"/>
<xsl:param name="changeLogContent"/>
<xsl:result-document encoding="UTF-8" indent="true" method="xml" href="{$outputFile}">
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd http://www.liquibase.org/xml/ns/dbchangelog" logicalFilePath="TODO">
<xsl:copy-of select="$changeLogContent"/>
</databaseChangeLog>
</xsl:result-document>
</xsl:template>