我在一个大样式表中有大量的这个,这使得样式表变得非常麻烦:
<xsl:when test="Field_Goal_Stats/Field_Goal_Total/FGTtl_Attempted">
"attempted": <xsl:value-of select="number(Field_Goal_Stats/Field_Goal_Total/FGTtl_Attempted)" />,</xsl:when><xsl:otherwise>
"attempted": 0,</xsl:otherwise></xsl:choose>
基本上我要做的就是直截了当。我试图从相应的XPath中获取number()
。如果失败,通常使用NaN,因为该字段不存在或字段不包含适合number()
的值,我将其设置为零。
无论如何要么在一行中执行此操作,要么以某种方式创建一个可重用的组件,我可以应用于大量其他XPath节点我正在运行此代码?在我的代码的很多部分中继续做整个选择/否则模式似乎是错误的。
答案 0 :(得分:0)
你可以像这样使用xsl:call-template
:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:call-template name="myTemplate">
<xsl:with-param name="myTestField" select="Field_Goal_Stats/Field_Goal_Total/FGTtl_Attempted" />
</xsl:call-template>
<xsl:call-template name="myTemplate">
<xsl:with-param name="myTestField" select="Field_Goal_Stats/Field_Goal_Total/FGTtl_AttemptedSecondField" />
</xsl:call-template>
</xsl:template>
<xsl:template name="myTemplate">
<xsl:param name="myTestField" />
<xsl:choose>
<xsl:when test="$myTestField">
"attempted": <xsl:value-of select="number($myTestField)" />,
</xsl:when>
<xsl:otherwise>
"attempted": 0,
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
在XSLT 2.0中,你可以这样做:
<xsl:value-of select="(Field_Goal_Stats/Field_Goal_Total/FGTtl_Attempted,0)[1]"/>
当值存在时,你得到它......当值不存在时,结果序列的第一个值是0
。
这在XSLT 1.0中不可用。