gpt4 book ai didi

XSLT 1.0 : replace new line character with _

转载 作者:行者123 更新时间:2023-12-01 14:40:48 25 4
gpt4 key购买 nike

我有这个下面的变量

  <xsl:variable name="testvar">
d
e
d
</xsl:variable>

我有这个功能:

    <xsl:choose>
<xsl:when test="not($str-input)">
<func:result select="false()"/>
</xsl:when>
<xsl:otherwise>
<func:result select="translate($str-input,$new-line,'_')"/>
</xsl:otherwise>
</xsl:choose>
</func:function>

当我测试这个函数时,我看到我的结果是这样的:_ d _ e _ d_我希望我的结果只是

d _ e _ d

最佳答案

在 XSLT 1.0 中:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:variable name="new-line" select="'&#10;'" />

<xsl:variable name="str-input">
d
e
d
</xsl:variable>

<!-- your <xsl:choose>, slightly modified -->
<xsl:template match="/">
<xsl:choose>
<xsl:when test="not($str-input)">
<xsl:value-of select="false()"/>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="temp">
<xsl:call-template name="normalize-newline">
<xsl:with-param name="str" select="$str-input" />
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="translate($temp, $new-line, '_')" />
</xsl:otherwise>
</xsl:choose>

</xsl:template>

<!-- a template that trims leading and trailing newlines -->
<xsl:template name="normalize-newline">
<xsl:param name="str" select="''" />

<xsl:variable name="temp" select="concat($str, $new-line)" />
<xsl:variable name="head" select="substring-before($temp, $new-line)" />
<xsl:variable name="tail" select="substring-after($temp, $new-line)" />
<xsl:variable name="hasHead" select="translate(normalize-space($head), ' ', '') != ''" />
<xsl:variable name="hasTail" select="translate(normalize-space($tail), ' ', '') != ''" />

<xsl:if test="$hasHead">
<xsl:value-of select="$head" />
<xsl:if test="$hasTail">
<xsl:value-of select="$new-line" />
</xsl:if>
</xsl:if>
<xsl:if test="$hasTail">
<xsl:call-template name="normalize-newline">
<xsl:with-param name="str" select="$tail" />
</xsl:call-template>
</xsl:if>
</xsl:template>

</xsl:stylesheet>

返回:

"        d _        e _        d"

空格是变量值的一部分。您可以使用 normalize-space() 删除它们,但因为我不知道 "d""e" 实际上是什么我保持不变。

关于XSLT 1.0 : replace new line character with _,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1492736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com