我正在生成MySQL的create语句。我的源XML如下所示:
<table name="TabName">
<column> ... </column> <!-- multiple columns -->
<primary-key> ... </primary-key>
<foreign-key> ... </foreign-key> <!-- multiple FKs -->
<key>... </key> <!-- multiple indexes -->
</table>
转化蛋白就像
<xsl:for-each select="column"> blabla ,</xsl:for-each>
<xsl:if test="primary-key"> blabla, </xsl:if>
<xsl:for-each select="key"> blabla, </xsl:for-each>
<xsl:for-each select="foreign-key"> blabla, </xsl:for-each>
请注意,我在每个语句的末尾添加了逗号。下面的SQL输出如下所示:
CREATE TABLE`categories` (
`CategoryID` tinyint(5) unsigned NOT NULL,
`CategoryName` varchar(15) NOT NULL,
`Description` mediumtext NOT NULL,
`Picture` varchar(50) NOT NULL,
PRIMARY KEY (`CategoryID`),) --here is bad column
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
如何在执行XSLT转换时删除该逗号?谢谢
发布于 2011-06-23 10:41:16
对于包含逗号的固定字符串,请查看我作为an answer to another question实现的an answer to another question函数。
如果您自己用XSLT创建逗号,只需避免创建错误的逗号即可。
<xsl:for-each select="...">
<!-- ... -->
<xsl:if test="position() < last()">,</xsl:if>
</xsl:for-each>
发布于 2011-06-23 11:14:49
您必须显式地管理每个迭代(或模板)中的条件。
通常,您可以使用XPath检查当前位置或以下兄弟姐妹,例如:
position()!=last()
或
count(following-sibling::*)!=0
例如:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" media-type="text" encoding="UTF-8" indent="no" />
<xsl:strip-space elements="*"/>
<xsl:param name="component" select="4"/>
<xsl:template match="table">
<xsl:apply-templates select="column|primary-key|key|foreign-key"/>
</xsl:template>
<xsl:template match="column">
<xsl:text>blabla</xsl:text>
<xsl:if test="position()!=last()">
<xsl:text>,
</xsl:text>
</xsl:if>
</xsl:template>
<xsl:template match="primary-key">
<xsl:text>blabla</xsl:text>
<xsl:if test="position()!=last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
应用于此输入:
<table name="TabName">
<column>a</column> <!-- multiple columns -->
<column>b</column> <!-- multiple columns -->
<column>c</column> <!-- multiple columns -->
<primary-key>pk1</primary-key>
</table>
获取:
blabla,
blabla,
blabla,
blabla
发布于 2011-06-23 10:32:01
Mb last()
或position()
函数对您有帮助吗?
https://stackoverflow.com/questions/6452563
复制相似问题