gpt4 book ai didi

xslt - XSLT 1.0中的"Regular expression"-style替换

转载 作者:行者123 更新时间:2023-12-05 00:08:54 24 4
gpt4 key购买 nike

我需要使用确实适合正则表达式的XSLT 1.0进行查找和替换。不幸的是,这些在1.0中不可用,并且由于我无法更改的安全设置,我也无法使用任何扩展库(例如EXSLT)。

我正在使用的字符串如下所示:
19;#John Smith;#17;#Ben Reynolds;#1;#Terry Jackson
我需要用; #替换数字和,字符。例如,以上内容将更改为:
John Smith, Ben Reynolds, Terry Jackson
我知道需要递归字符串函数,可能使用子字符串和转换,但是我不确定从哪里开始。

有没有人对如何解决这个问题有一些指示?这是我开始的事情:

<xsl:template name="TrimMulti">
<xsl:param name="FullString" />
<xsl:variable name="NormalizedString">
<xsl:value-of select="normalize-space($FullString)" />
</xsl:variable>
<xsl:variable name="Hash">#</xsl:variable>
<xsl:choose>
<xsl:when test="contains($NormalizedString, $Hash)">
<!-- Do something and call TrimMulti -->
</xsl:when>
</xsl:choose>
</xsl:template>

最佳答案

我希望您对SO提出的问题并没有简化太多,因为这不应该是一个太大的问题。

您可以定义模板并递归调用它,只要保持输入字符串的格式一致即可。

例如,

<xsl:template name="TrimMulti">
<xsl:param name="InputString"/>
<xsl:variable name="RemainingString"
select="substring-after($InputString,';#')"/>
<xsl:choose>
<xsl:when test="contains($RemainingString,';#')">
<xsl:value-of
select="substring-before($RemainingString,';#')"/>
<xsl:text>, </xsl:text>
<xsl:call-template name="TrimMulti">
<xsl:with-param
name="InputString"
select="substring-after($RemainingString,';#')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$RemainingString"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

我通过以下调用测试了该模板:
<xsl:template match="/">
<xsl:call-template name="TrimMulti">
<xsl:with-param name="InputString">19;#John Smith;#17;#Ben Reynolds;#1;#Terry Jackson</xsl:with-param>
</xsl:call-template>
</xsl:template>

并得到以下输出:
John Smith, Ben Reynolds, Terry Jackson

这似乎是您所追求的。

如果您熟悉函数式编程,则很容易解释其作用。 InputString参数始终采用 [number];#[name];#[rest of string]的形式。每次对 TrimMulti模板的调用都会切掉 [number];#部分并打印出 [name]部分,然后将其余表达式递归传递给它自己。

基本情况是 InputString的形式为 [number];#[name],在这种情况下 RemainingString变量将不包含 ;#。由于我们知道输入已经结束,因此我们这次不输出逗号。

关于xslt - XSLT 1.0中的"Regular expression"-style替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1043866/

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