2

我在两个不同重点之间的间距值方面遇到问题。下面给定 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>
4

2 回答 2

1

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

    <xsl:if test="preceding-sibling::*[1][self::em]">
      <xsl:text> </xsl:text>
    </xsl:if>
于 2012-09-07T12:38:42.903 回答
0

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

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

甚至

<xsl:text> </xsl:text>

应该可以解决问题,但很容易错过代码中的空格,最好使用#x20; 为了能见度。

您可以将它放在 xsl:choose 关闭标记之后。因此,即使 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>
于 2012-09-07T10:49:45.577 回答