Файл данных:
<?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?
final working table.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
Это успешно создает один файл для каждого набора изменений в файле журнала. (Моя следующая цель - сгруппировать наборы изменений, которые находятся в одной таблице, но это выходит за рамки этого вопроса)
Если вам интересно, что я делаю.
Инструменты миграции Liquibase создают единый файл журнала изменений для существующей базы данных. Я экспериментировал, чтобы разделить этот вывод в отдельный файл журнала для каждой таблицы / объекта (в частности, mysql)