我在两个不同重点之间的间距值方面存在问题。下面给出的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>
答案 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>