如何解决XSLT-删除最后一个逗号
| 我正在生成MysqL的create table语句。我的源XML看起来像:<table name=\"TabName\">
<column> ... </column> <!-- multiple columns -->
<primary-key> ... </primary-key>
<foreign-key> ... </foreign-key> <!-- multiple FKs -->
<key>... </key> <!-- multiple indexes -->
</table>
Transformatin就像
<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转换时如何删除逗号?谢谢
解决方法
对于包含逗号的固定字符串,请查看我实现为另一个问题的答案的
substring-before-last
函数。
如果您在XSLT中自己创建逗号,请避免创建错误的逗号。
<xsl:for-each select=\"...\">
<!-- ... -->
<xsl:if test=\"position() < last()\">,</xsl:if>
</xsl:for-each>
, 您必须在每次迭代(或模板)中显式管理条件。
通常,您使用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
, Mblast()
或position()
功能对您有帮助吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。