我幾乎已經解決了這個問題,然後發現coverage-ref屬於相應coverage元素中的關鍵屬性。如何通過XSL使用密鑰調用模板
的XPath看起來像
/消息/人,信息/要求列表/要求/
<coverage-ref>4</coverage-ref>
/消息/人,信息/覆蓋列表/
<coverage key="4" id="23" >
...
</coverage>
目前XSL的片段
<xsl:template match="claim" mode="fact">
<ClaimFact>
<coverage>
<xsl:choose>
<xsl:when test="./coverage-ref">
<!--
COVERAGE-<xsl:value-of select="util:ifNull(./coverage-ref, '0')"/>
-->
<xsl:call-template name="coverage-ref">
<xsl:with-param name="coverage-ref" select="./coverage-ref" />
</xsl:call-template>
</xsl:when>
<xsl:when test="./../../../coverage/@id">COVERAGE-<xsl:value-of select="./../../../coverage/@id"/></xsl:when>
<xsl:otherwise><xsl:text>UNKNOWNCOVERAGE</xsl:text></xsl:otherwise>
</xsl:choose>
</coverage>
</ClaimFact>
</xsl:template>
<xsl:template match="coverage|coverage-ref" >
<xsl:param name="coverage-ref" />
<xsl:variable name="coverage"
select="/person-info/coverage-list/coverage[@key = $coverage-ref]" />
<CoverageDimension>
<mycoverageref><xsl:value-of select="$coverage" /></mycoverageref>
...
</CoverageDimension>
</xsl:template>
錯誤我得到
Error at xsl:call-template on line 1845 column 51 of personinfo.xsl:
XTSE0650: No template exists named coverage-ref
現有的註釋掉會把覆蓋-REF到mycoverageref。
我想用xsl:call-template,xsl:param和xsl:variable做的事情是:1)將mycoverageref設置爲元素的@id而不是@key。
2)更好的辦法是將值4替換爲23,現有的應用模板應該在CoverageDimension上工作。
在此先感謝!
我用你的解決方案的一部分,並會發布我在答案中做了什麼。當前的xsl沒有定義鍵或keylookups。我們可能想要爲未來的版本走這條路線,但這需要對現有的xsl進行整個重寫。 – iowatiger08 2013-04-12 15:05:56