2

データファイル:

<?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)の個別のログファイルに分割することを実験していました

4

1 に答える 1

3

スタイルシートに名前空間がありません。これは機能します:

<?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">       
        <top>  
          <xsl:copy-of select="*"/>      
        </top> 
      </xsl:for-each>   
  </xsl:template>
</xsl:stylesheet>
于 2013-01-15T15:48:51.923 に答える