数据文件:
<?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>
注意:这会将changelog(liquibase generateChangeLog输出)拆分为单独的更改 日志文件
xsltproc table.xslt liquibase.changelog.xml
这在日志文件中为每个changeSet成功生成一个文件。 (我的下一个目标是对单个表上的变更集进行分组,但这超出了此问题的范围)
如果你想知道我在做什么。
Liquibase迁移工具为现有数据库生成单个更改日志文件。我正在尝试将该输出拆分为每个表/对象(特别是mysql)的单独日志文件
答案 0 :(得分: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>