我是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