基于最新Saxon HE实现动态字符串替换的技术方案咨询(从静态替换升级为动态替换)
基于Saxon HE的XSLT动态字符串替换问题
我现在遇到了一个XSLT动态替换的问题,想请教下基于最新Saxon HE的可行实现方案,具体情况如下:
需求调整
- 原本需求是静态替换,现已调整为动态替换
给定的XML数据结构
<data> <replacements> <replace key="greeting" value='Hello' /> <replace key="name" value='Donald' /> </replacements> <rules> <rule key="GREETING" value="replacements/replace[@key='greeting']/@value" /> <rule key="NAME" value="replacements/replace[@key='name']/@value" /> </rules> <text> GREETING NAME duck. </text> </data>
核心需求
需要把<text>元素里的文本内容,替换所有出现在<rules>中的key值,替换的内容是对应<rule>元素的value属性里的XPath表达式求值后的结果,最终期望得到的文本是:
Hello Donald duck.
当前尝试的代码与结果
我想到用<xsl:evaluate>来处理XPath表达式的动态求值,写了下面的XSLT代码:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0" > <xsl:output indent="yes"/> <xsl:template match="data"> <xsl:copy> <xsl:evaluate xpath="/data/rules/rule[1]/@value" context-item="." /> </xsl:copy> </xsl:template> </xsl:stylesheet>
运行后得到的结果是:
<data value="Hello"/>
当前遇到的困境
我已经实现了单个XPath表达式的动态求值,但没法完成完整的字符串替换;之前尝试参考Martin的方案时,遇到了XSLT与XPath混合使用不符合预期的问题,所以想请教下合适的解决办法。
内容的提问来源于stack exchange,提问作者topskip
相关产品推荐
相关产品推荐

