换行XSL不起作用

时间:2014-06-23 08:56:44

标签: html xml xslt line-breaks

我有这样的XML:

<c id="de-4" level="file">
  <did>
    <unitid label="Cotes">1 DNG 5</unitid>
    <unittitle label="my title">some text1 <lb />some text2<lb />some text3.</unittitle>
    <unitdate label="Date" normal="2014">2014</unitdate>
  </did>

我想使用并转换LB标签 - &gt; BR的HTML。 我使用XSL样式表来执行此操作:

<xsl:template name="cree_cote">
    <td align='left' valign='top' class="titres">
        <xsl:call-template name="_noeud">
            <xsl:with-param name="noeud" select="did/unittitle"/>
        </xsl:call-template>
    </td>
</xsl:template>

<xsl:template match="lb">
    <br />
</xsl:template>

<!--  le contenu d'un noeud -->
<xsl:template name="_noeud">
    <xsl:param name="noeud"/>
    <xsl:for-each select="$noeud">
        <xsl:text> </xsl:text>
    <xsl:value-of select="text()"/>
        <xsl:text> </xsl:text>
        <xsl:if test="$avec_label">
            <xsl:if test="@label">
                <span class='ead_label'>[<xsl:value-of select="@label"/>]</span>
            </xsl:if>
        </xsl:if>
    </xsl:for-each>
    <xsl:apply-templates select="$noeud/*"/>
</xsl:template>

但转换后,我有这个:

<td valign="top" align="left" class="titres">some text1 some text2some text3.<br><br></td>

我不明白为什么我的<BR>在文本末尾。

2 个答案:

答案 0 :(得分:1)

由于我们无法访问您的整个XSLT,因此很难给出最干净的建议,但是在文本之后输出lb的原因是因为您输出的是{{1在将模板应用于子节点之前!

请试一试:

text()

答案 1 :(得分:0)

更改

<xsl:template name="cree_cote">
    <td align='left' valign='top' class="titres">
        <xsl:call-template name="_noeud">
            <xsl:with-param name="noeud" select="did/unittitle"/>
        </xsl:call-template>
    </td>
</xsl:template>

<xsl:template name="cree_cote">
    <td align='left' valign='top' class="titres">
        <xsl:apply-templates select="did/unittitle"/>
    </td>
</xsl:template>

然后改变

<xsl:template name="_noeud">
    <xsl:param name="noeud"/>
    <xsl:for-each select="$noeud">
        <xsl:text> </xsl:text>
    <xsl:value-of select="text()"/>
        <xsl:text> </xsl:text>
        <xsl:if test="$avec_label">
            <xsl:if test="@label">
                <span class='ead_label'>[<xsl:value-of select="@label"/>]</span>
            </xsl:if>
        </xsl:if>
    </xsl:for-each>
    <xsl:apply-templates select="$noeud/*"/>
</xsl:template>

<xsl:template match="did/unittitle">
  <xsl:text> </xsl:text>
  <xsl:apply-templates/>
  <xsl:text> </xsl:text>
  <xsl:if test="$avec_label and @label">
    <span class="ead_label">[xsl:value-of select="@label"/>]</span>
  </xsl:if>
</xsl:template>

当然保留lb元素的模板。