首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XSLT -删除最后一个逗号

XSLT -删除最后一个逗号
EN

Stack Overflow用户
提问于 2011-06-23 10:26:42
回答 3查看 1.8K关注 0票数 2

我正在生成MySQL的create语句。我的源XML如下所示:

代码语言:javascript
运行
复制
<table name="TabName">
  <column> ... </column> <!-- multiple columns -->
  <primary-key> ... </primary-key>
  <foreign-key> ... </foreign-key> <!-- multiple FKs -->
  <key>... </key> <!-- multiple indexes -->
</table>

转化蛋白就像

代码语言:javascript
运行
复制
<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输出如下所示:

代码语言:javascript
运行
复制
    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转换时删除该逗号?谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-23 10:41:16

对于包含逗号的固定字符串,请查看我作为an answer to another question实现的an answer to another question函数。

如果您自己用XSLT创建逗号,只需避免创建错误的逗号即可。

代码语言:javascript
运行
复制
<xsl:for-each select="...">
  <!-- ... -->
  <xsl:if test="position() &lt; last()">,</xsl:if>
</xsl:for-each>
票数 5
EN

Stack Overflow用户

发布于 2011-06-23 11:14:49

您必须显式地管理每个迭代(或模板)中的条件。

通常,您可以使用XPath检查当前位置或以下兄弟姐妹,例如:

代码语言:javascript
运行
复制
position()!=last()

代码语言:javascript
运行
复制
count(following-sibling::*)!=0

例如:

代码语言:javascript
运行
复制
<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>,&#xa;</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> 

应用于此输入:

代码语言:javascript
运行
复制
<table name="TabName">
  <column>a</column> <!-- multiple columns -->
  <column>b</column> <!-- multiple columns -->
  <column>c</column> <!-- multiple columns -->
  <primary-key>pk1</primary-key>
</table>

获取:

代码语言:javascript
运行
复制
blabla,
blabla,
blabla,
blabla
票数 1
EN

Stack Overflow用户

发布于 2011-06-23 10:32:01

Mb last()position()函数对您有帮助吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6452563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档