gpt4 book ai didi

mysql - 这个 xslt 有什么问题?

转载 作者:行者123 更新时间:2023-11-29 02:01:12 26 4
gpt4 key购买 nike

数据文件:

<?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

这是在日志文件中为每个变更集成功生成一个文件。 (我的下一个目标是对单个表上的变更集进行分组,但这超出了这个问题的范围)

如果您想知道我在做什么。

Liquibase 迁移工具为现有数据库生成单个更改日志文件。我正在尝试将该输出拆分为每个表/对象(特别是 mysql)的单独日志文件

最佳答案

样式表中缺少命名空间。这有效:

<?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>

关于mysql - 这个 xslt 有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14341271/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com