我有一个字符串,可以有换行符和撇号。我需要替换两者。我有以下xsl代码:
<xsl:call-template name="replaceapostrophes">
<xsl:with-param name="string">
<xsl:call-template name="replacelinefeeds">
<xsl:with-param name="string" select="hl7:text/hl7:paragraph"/>
</xsl:call-template>
</xsl:with-param>
</xsl:call-template>
<!-- template for replacing line feeds with <br> tags for page display -->
<xsl:template name="replacelinefeeds">
<xsl:param name="string"/>
<xsl:choose>
<xsl:when test="contains($string,' ')">
<xsl:value-of select="substring-before($string,' ')"/>
<br/>
<xsl:call-template name="replacelinefeeds">
<xsl:with-param name="string" select="substring-after($string,' ')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$string"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- template for replacing html encoded apostrophes for page display -->
<xsl:template name="replaceapostrophes">
<xsl:param name="string"/>
<xsl:choose>
<xsl:when test="contains($string, '&#39;')">
<xsl:value-of select="substring-before($string,'&#39;')"/>'<xsl:call-template name="replaceapostrophes">
<xsl:with-param name="string" select="substring-after($string,'&#39;')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$string"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
这是xml代码:
<text>
<paragraph>Adding apostrophe to the patient&#39;s instructions
and checking for a second line</paragraph>
</text>
然而,当这个运行时,我会得到撇号,但不是换行符。
Adding apostrophe to the patient's instructions and checking for a second line
而不是
Adding apostrophe to the patient's instructions
and checking for a second line
如果在同一个字符串中有一个或另一个但不是两个都可以正常工作。
我需要采用不同的方式吗?
由于
答案 0 :(得分:1)
反过来使用模板,即首先替换撇号,然后换行。并确保在输出时使用xsl:copy-of
而不是xsl:value-of
替换换行符的结果,否则br
元素将丢失。如果您有<xsl:variable name="text"><xsl:call-template name="replacelinefeeds">..</xsl:call-template></xsl:variable>
,请务必使用<xsl:copy-of select="$text"/>
。
答案 1 :(得分:1)
尝试相反的方法(首先替换撇号,然后换行)。
基本上,您将HTML <br/>
元素放入变量中,然后使用其文本值替换撇号,从而再次删除换行符。