即使在顶部使用<xsl:strip-space elements =“ *” />,也要保留两个元素之间的空间

时间:2019-08-20 02:43:40

标签: xml xslt xpath xslt-2.0

我正在转换HTML-> FO。 我需要保留两个之间的空间

<var>

标签,是

的子级

<span>

当我在xsl中输入以下内容时:

xsl:strip-space elements =“ *”->删除

周围的所有空格

xsl:preserve-space elements =“ span”->在其他数据场景中也保留所有冗余空间,这些空间不一定在标记之间。

我需要保留仅在 var 之间的空间。

HTML:

<span style="font-size:11pt;font-family:&quot;&quot;">DATED: <var name="DATE"/> DAY of <var name="DAY"/> <var name="YEAR"/></span>

我正在之间失去空白

<var name="DAY"/>LOST_space<var name="YEAR"/>

XSL:

<xsl:strip-space elements="*"/>
<!--xsl:preserve-space elements="span"/-->

<xsl:template match="span">
    <fo:inline height="0pt" font-family="abc" white-space-collapse="false" font-size="11pt" text-decoration="inherit">
        <xsl:apply-templates/>
    </fo:inline>

</xsl:template>

<xsl:template match="var">
    <xsl:variable name="defaultSystemValue">_________</xsl:variable>
    <xsl:value-of select="$defaultSystemValue"/>

</xsl:template>

输出:

<?xml version = '1.0' encoding = 'UTF-8'?>
<fo:inline height="0pt" font-family="abc" white-space-collapse="false" font-size="11pt" text-decoration="inherit" xmlns:fo="http://www.w3.org/1999/XSL/Format">DATED: _________ DAY of __________________</fo:inline>

期望: 日期:_________ ___________________天

电流输出: 日期:________________天

1 个答案:

答案 0 :(得分:0)

由于您知道它会发生,因此请在XSLT中通过在需要时添加空格来解决它。

您可以在已有的模板中添加xsl:if。由于您使用的是XSLT 2.0,xsl:next-match会在当前样式表中找到模板(与XSLT 1.0不同),因此您可以选择为第二个var制作一个单独的模板:

<xsl:template match="var[preceding-sibling::node()[1][self::var]]">
  <xsl:text> </xsl:text>
  <xsl:next-match />
</xsl:template>