如何在 XSLT-1.0 中连接 XML 标记?



我尝试使用此 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:choosefn: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="." />之后。

最新更新