如何在两个不同的强调标签之间添加空间

时间:2012-09-07 10:42:55

标签: xslt-2.0

我在两个不同重点之间的间距值方面存在问题。下面给出的xslt的当前输出还可以,但两个标签之间没有间距。请帮助我,因为我不太了解转型。详细问题可以在下面看到。

这是输入XML:

<caption>
    <content>Box</content>
      <number>1</number>
      <description>
        <em type="bold">Some text with scientic name: </em>
    <em type="bolditalic">fhadinistis</em>
      </description>
</caption>

输出结果为:

<cap>
    <text>Box</text>
    <num>1</num>
    <content>
        <b>Some text with scientic name:</b><b>
            <i>fhadinistis</i>
        </b>
    </content>
</cap>

所需的输出应该是:(注意在结束和打开粗体标记之间有空格)

<cap>
    <text>Box</text>
    <num>1</num>
    <content>
        <b>Some text with scientic name:</b> <b>
            <i>fhadinistis</i>
        </b>
    </content>
</cap>

我的XSLT是:

<xsl:template match="em">
    <xsl:choose>
        <xsl:when test="@type='bolditalic'">
            <b>
                <it>
                    <xsl:apply-templates/>
                </it>
            </b>
        </xsl:when>
        <xsl:when test="@type='boldunderline'">
            <b>
                <ul>
                    <xsl:apply-templates/>
                </ul>
            </b>
        </xsl:when>
        <xsl:when test="@type='italicunderline'">
            <it>
                <ul>
                    <xsl:apply-templates/>
                </ul>
            </it>
        </xsl:when>                 
    </xsl:choose>
</xsl:template>

2 个答案:

答案 0 :(得分:1)

只需将其放在模板的开头:

    <xsl:if test="preceding-sibling::*[1][self::em]">
      <xsl:text> </xsl:text>
    </xsl:if>

答案 1 :(得分:0)

无论您需要空格,都可以尝试使用:

<xsl:text>#x20;</xsl:text>

甚至

<xsl:text> </xsl:text>

应该做的伎俩但很容易错过代码中的空格,更好地使用#x20;为了能见度。

你可以把它放在xsl:choose close标签之后。因此,即使xsl:choose = nothing并且您获得多个黑色空格,HTML也只会显示1(默认情况下)

将其实施为:

<xsl:template match="em">
    <xsl:choose>
        <xsl:when test="@type='bolditalic'">
            <b>
                <it>
                    <xsl:apply-templates/>
                </it>
            </b>
        </xsl:when>
        <xsl:when test="@type='boldunderline'">
            <b>
                <ul>
                    <xsl:apply-templates/>
                </ul>
            </b>
        </xsl:when>
        <xsl:when test="@type='italicunderline'">
            <it>
                <ul>
                    <xsl:apply-templates/>
                </ul>
            </it>
        </xsl:when>                 
    </xsl:choose>
    <xsl:text>#x20;</xsl:text>
</xsl:template>