データファイル:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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-2.0.xsd">
<changeSet >
...
</changeSet>
<changeSet >
...
</changeSet>
</databaseChangeLog>
xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:for-each select="databaseChangeLog/changeSet">
<top>
<xsl:copy-of select="*"/>
</top>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
xsltproc
ツールの使用:
xsltproc input.xslt input.xml
何も出力しません。
xslt の何が問題になっていますか?
最終作業テーブル.xslt:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:db="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<xsl:for-each select="db:databaseChangeLog/db:changeSet">
<xsl:document href="base/tables/{position()}_{name(*[1])}_{*[1]/@tableName}.xml">
<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-2.0.xsd">
<xsl:copy-of select="."/>
</databaseChangeLog>
</xsl:document>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
注:これにより、変更ログ (liquibase generateChangeLog 出力) が個別の変更ログ ファイルに分割されます
xsltproc table.xslt liquibase.changelog.xml
これにより、ログ ファイルの changeSet ごとに 1 つのファイルが正常に生成されます。(私の次の目標は、単一のテーブルにある変更セットをグループ化することですが、それはこの質問の範囲外です)
あなたが私が何をしているのか疑問に思っている場合に備えて。
Liquibase 移行ツールは、既存のデータベースに対して単一の変更ログ ファイルを生成します。その出力を各テーブル/オブジェクト(特にmysql)の個別のログファイルに分割することを実験していました