我是XSLT新手,花了相当多的时间来处理创建内联查找映射,以便将XSLT 2.0中映射列表的另一个值替换为特定值找出我只能用1.0。 :-(XSLT 1.0值查找地图
我的问题是如何能够复制在1.0以下工作XSLT 2.0的代码。我已经尝试了一些事情,但似乎无法得到它的工作。
一点要注意,如果有没有地图则元素应该是空的
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:variable name="mapxml" >
<map>
<Country>
<input value="GB">RZ</input>
<input value="FR">TH</input>
</Country>
</map>
</xsl:variable>
<xsl:variable name="vMap"
select="$mapxml" />
<xsl:key name="kInputByVal" match="input"
use="@value" />
<xsl:template match="Country/text()">
<xsl:sequence select=
"(key('kInputByVal', ., $vMap/*/Country)[1]/text()
)[1]
"/>
</xsl:template>
</xsl:stylesheet>
输入XML:
<user>
<Country>GB</Country>
<Name>FOO</Name>
<Address>BAR</Address>
<user>
尼斯XSLT代码和解释,加十.. 。 –
感谢您的快速回答和解释@Tomalak - 这是一种享受,并帮助我理解到底发生了什么:-) –
看看@ michael.hor257k的答案,他也花了很多时间工作的关键。我考虑使用这个任务的关键点矫枉过正,所以我将它从我的解决方案中删除,但当然可以保留它。如果您有非常多的映射和非常大的输入文档(数千个节点的顺序),那么使用密钥会显着提高性能。如果你的投入通常很小,那么它就不会有太大的区别。 – Tomalak