我们正在从xml表单生成pdf,需要对值进行一些替换以在pdf中显示。
xml的部分看起来像这样
<c_child>
<c_child_status/>
<c_child_id>400044</c_child_id>
<c_dob>2012-09-19</c_dob>
<c_gender>M</c_gender>
<c_forename>fred</c_forename>
<c_surname>bloggs</c_surname>
</c_child>
在当前的xsl / fo中,它使用以下内容插入性别值
<fo:table-cell border-style="inset" border-width="1pt" padding="2pt" background-repeat="repeat" display-align="center">
<fo:block>
<xsl:value-of select="//c_child/c_child_id"/>
</fo:block>
</fo:table-cell>
我需要做的是测试性别值,如果M我要插入MALE,F然后将FEMALE插入到最终的PDF中。
我玩过xsl:if
测试等,但是XSL被认为是有效的,它没有进行转换。
任何帮助表示赞赏
Redbyte
答案 0 :(得分:0)
如果您正在使用XSLT 2.0,则可以直接在选择中添加if
语句...
<xsl:value-of select="if (//c_child/c_gender = 'M') then 'MALE' else 'FEMALE'"/>
如果您正在使用XSLT 1.0,我会做的是将xsl:value-of
替换为xsl:apply-templates
并添加模板以处理c_gender/text()
...
替换xsl:apply-templates
<xsl:apply-templates select="//c_child/c_gender"/>
新xsl:template
<xsl:template match="c_gender[.='M']/text()">
<xsl:text>MALE</xsl:text>
</xsl:template>
<xsl:template match="c_gender[.='F']/text()">
<xsl:text>FEMALE</xsl:text>
</xsl:template>
它很冗长,但很容易管理imo。您还可以使用xsl:choose
而不是两个单独的模板。 xsl:choose
可以位于单独的模板中,也可以直接放在fo:table-cell
中(替换xsl:value-of
)...
<xsl:template match="c_gender/text()">
<xsl:choose>
<xsl:when test=".='M'">
<xsl:text>MALE</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>FEMALE</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>