我将xml文件传递给我的fo文件,如下所示:
<?xml version="1.0"?>
<activityExport>
<resourceKey>
<key>monthName</key>
<value>January</value>
</resourceKey>
所以,如果我直接使用:
<xsl:value-of select="activityExport/resourceKey[key='monthName']/value"/>
我可以在PDF文件中看到“1月”就好了。
但是,如果我在模板中使用它,我有:
<xsl:template name="format-month">
<xsl:param name="date"/>
<xsl:param name="month" select="format-number(substring($date,6,2), '##')"/>
<xsl:param name="format" select="'m'"/>
<xsl:param name="month-word">
<xsl:choose>
<xsl:when test="$month = 1"><xsl:value-of select="activityExport/resourceKey[key='monthName']/value"/>
</xsl:when>
当我打电话时,我看不到“一月”:
<xsl:variable name="monthName">
<xsl:call-template name="format-month">
<xsl:with-param name="format" select="'M'"/>
<xsl:with-param name="month" select="@monthValue"/>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="concat($monthName,' ',@yearValue)"/>
我知道我的模板有效,因为如果我有一个静态字符串:
<xsl:choose>
<xsl:when test="$month = 1">Januaryyy</xsl:when>
然后我可以看到Januaryyyy很好。
因此模板工作,资源存在,但是select-value不能在call-template或xsl:choose或xsl:test中进行测试
有任何帮助吗? 此致!
答案 0 :(得分:2)
您的模板可能没问题,只是您从XML中的不合适位置调用它。因此,您用来设置month-word
的XPath找不到任何东西 - 它是一条通向任何东西的路径。
例如,以下XSLT样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template name="format-month">
<xsl:param name="date"/>
<xsl:param name="month" select="format-number(substring($date,6,2), '##')"/>
<xsl:param name="format" select="'m'"/>
<xsl:param name="month-word">
<xsl:choose>
<xsl:when test="$month = 1">
<xsl:value-of select="activityExport/resourceKey[key='monthName']/value"/>
</xsl:when>
</xsl:choose>
</xsl:param>
<xsl:value-of select="$month-word"/>
</xsl:template>
<xsl:template match="/">
<xsl:variable name="monthName">
<xsl:call-template name="format-month">
<xsl:with-param name="month" select=" '1' "/>
<xsl:with-param name="format" select="'M'"/>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="concat($monthName,' ',@yearValue)"/>
</xsl:template>
</xsl:stylesheet>
应用于此XML:
<activityExport>
<resourceKey>
<key>monthName</key>
<value>January</value>
</resourceKey>
</activityExport>
生成此输出:
January
请注意,我已将month
参数替换为您的模板,其值为1
。此输入XML中没有元素具有@monthValue
属性(这使我相信您从不适合的位置调用模板),因此month-word
不会因{{1}而设置}}
为了使您的实际输入XML正常工作,您可以尝试用xsl:choose
替换XPath,其中双斜杠定义XML文档中任何地方的路径。如果只有一个"//activityExport/resourceKey[key='monthName']/value"
节点,这应该没问题。否则,您将需要找出合适的XPath。