String XSLT字符串替代
在XSLT2.0中,是否有一种简单的方法来替换字符串中的命名占位符 我正在考虑类似Python的string.Template的东西,您可以在其中执行以下操作:String XSLT字符串替代,string,xslt,String,Xslt,在XSLT2.0中,是否有一种简单的方法来替换字符串中的命名占位符 我正在考虑类似Python的string.Template的东西,您可以在其中执行以下操作: d = dict(name='Joe', age='50') print Template("My name is $name and my age is $age").substitute(d) 关键是要将字符串外部化,以便可以轻松地对其进行更改。到目前为止,我发现的唯一方法是使用带参数的命名xsl:template,但这相当冗长。
d = dict(name='Joe', age='50')
print Template("My name is $name and my age is $age").substitute(d)
关键是要将字符串外部化,以便可以轻松地对其进行更改。到目前为止,我发现的唯一方法是使用带参数的命名xsl:template,但这相当冗长。有更简单的方法吗?Python字符串模板的顺序上没有高级功能,但是您可以使用xsl:analyze string执行类似的操作,这将允许您一次处理一个字符串的正则表达式分析。如果希望重放是表驱动的,可以设置xsl:key来存储映射,并编写xsl:function来对任意字符串执行替换
这不是世界上最简单的事情,但如果做得正确,以后肯定是可行和可重用的。我最终做了如下事情:
<!-- Reusable template to perform substitutions on a string -->
<xsl:template name="substitutions">
<!-- "string" is a string with placeholders surrounded by {} -->
<xsl:param name="string" />
<!-- "subs" is a list of nodes whose "key" attributes are the placeholders -->
<xsl:param name="subs" />
<xsl:analyze-string select="$string" regex="\{{(.*?)\}}">
<xsl:matching-substring>
<xsl:value-of select="$subs/sub[@key=regex-group(1)]" />
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="." />
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
<!-- Example use of template -->
<xsl:variable name="nameStr">My name is {name} and my age is {age}</xsl:variable>
<xsl:call-template name="substitutions">
<xsl:with-param name="string" select="$nameStr" />
<xsl:with-param name="subs">
<sub key="name">Joe</sub>
<sub key="age">50</sub>
</xsl:with-param>
</xsl:call-template>
我的名字是{name},我的年龄是{age}
乔
50
我必须为替换名称使用属性,而不仅仅是传递具有不同名称的节点(例如Joe)。XPath(或者至少是我使用的处理器Saxon)似乎不允许像“$subs/regex group(1)”这样的动态表达式。但是它允许“$subs/sub[@key=regex group(1)]”您的问题不清楚。您是否想要一种自动机制,可以在替换值表中查找形式为$name的标记,并用值替换$name?在特定的文本节点中?全局?我正在寻找我可以调用的东西,向它传递一个特定的字符串和一组参数。使用分析字符串是个好主意——请参阅我的解决方案,作为单独的答案发布。