我尝试使用此 XSLT-1.0 文件处理一个 XML 文件。
我想将所有<pr>
标签连接在表的同一单元格中。
这是我的 XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<cours>
<sigle>GEN1051</sigle>
<titre>Ingénierie et entreprises II</titre>
<prgs>
<pr>4108</pr>
<pr>7643</pr>
<pr>7833</pr>
</prgs>
<credits>3</credits>
</cours>
我尝试了xsl:choose
和fn:concat
函数,但当然,这不起作用,因为这会产生三个空单元格,而不是一个带有我的 3 个<pr>
标签值的单元格。
这是我的 XSLT 的一部分:
<xsl:for-each select="prgs/pr">
<xsl:choose>
<xsl:when test="pr = 1">
<td>
<xsl:value-of select="."/>
</td>
<xsl:otherwise>
<td>
<xsl:value-of select='concat(pr, pr)'/>
</td>
</xsl:otherwise>
</xsl:when>
</xsl:choose>
</xsl:for-each>
谁知道这个问题的更好解决方案?
如果要将所有三个pr
值放在同一个单元格中,可以简单地执行以下操作:
在 XSLT 1.0 中:
<td>
<xsl:for-each select="prgs/pr">
<xsl:value-of select="." />
<xsl:if test="position() != last()">; </xsl:if>
</xsl:for-each>
</td>
在 XSLT 2.0 中:
<td>
<xsl:value-of select="prgs/pr" separator="; "/>
</td>
两者的输出将是:
<td>4108; 7643; 7833</td>
这是假设您处于cours
的上下文中(如您的代码段所示(。
可以使用以下 XSLT-1.0 样式表:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Identity template -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="prgs">
<xsl:copy>
<td>
<xsl:for-each select="pr">
<xsl:value-of select="." />
</xsl:for-each>
</td>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
其输出为:
<?xml version="1.0"?>
<cours>
<sigle>GEN1051</sigle>
<titre>Ingénierie et entreprises II</titre>
<prgs>
<td>410876437833</td>
</prgs>
<credits>3</credits>
</cours>
它将所有三个<pr>
元素的值连接到一个<td>
元素中。
如果要分隔<pr>
值,只需输入
<xsl:if test="position() != last()"><xsl:text> - </xsl:text></xsl:if>
在xsl:for-each
循环中的<xsl:value-of select="." />
之后。