Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql XSLT-删除最后一个逗号_Mysql_Sql_Xml_Xslt - Fatal编程技术网

Mysql XSLT-删除最后一个逗号

Mysql XSLT-删除最后一个逗号,mysql,sql,xml,xslt,Mysql,Sql,Xml,Xslt,我正在生成MySQL的CREATETABLE语句。我的源XML看起来像: <table name="TabName"> <column> ... </column> <!-- multiple columns --> <primary-key> ... </primary-key> <foreign-key> ... </foreign-key> <!-- multiple FKs

我正在生成MySQL的CREATETABLE语句。我的源XML看起来像:

<table name="TabName">
  <column> ... </column> <!-- multiple columns -->
  <primary-key> ... </primary-key>
  <foreign-key> ... </foreign-key> <!-- multiple FKs -->
  <key>... </key> <!-- multiple indexes -->
</table>
    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转换时,如何删除该逗号?感谢

Mb
last()
position()
函数帮助您?

对于包含逗号的固定字符串,请查看我作为实现的上次函数之前的
子字符串

如果您自己在XSLT中创建逗号,只要避免创建错误的逗号即可

<xsl:for-each select="...">
  <!-- ... -->
  <xsl:if test="position() &lt; last()">,</xsl:if>
</xsl:for-each>

,

您必须明确管理每个迭代(或模板)中的条件

通常使用XPath检查当前位置或以下同级,如:

position()!=last()

例如:

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

嗯,我不知道怎么做。你能提供一些例子吗?这确实有效:)但我找到了更好的解决方案,在我确定存在的每一行之前添加逗号,而不是在之后。你可以,但你必须对这种存在有真正的把握。否则你仍然需要一个条件。
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,
blabla