XSLT-删除最后一个逗号

如何解决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() &lt; 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>,&#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> 
应用于此输入:
<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
    ,        Mb
last()
position()
功能对您有帮助吗?     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?