0

我在一个大的样式表中有很多这样的东西,它使样式表变得非常麻烦:

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

基本上我想做的是直截了当。我正在尝试number()从相应的 XPath 中获取。如果失败,通常使用 NaN,因为该字段不存在或该字段不包含适合 的值number(),我将其设置为零。

无论如何,要么在 1 行中执行此操作,要么以某种方式创建一个可重用的组件,我可以将其应用于运行此代码的大量其他 XPath 节点?在我的代码的许多部分中继续执行整个选择/否则模式似乎是错误的。

4

2 回答 2

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>
于 2013-09-11T19:34:15.490 回答
0

在 XSLT 2.0 中,您可以:

<xsl:value-of select="(Field_Goal_Stats/Field_Goal_Total/FGTtl_Attempted,0)[1]"/>

当值存在时,你得到它......当值不存在时,结果序列的第一个值是0.

这在 XSLT 1.0 中不可用。

于 2013-09-11T20:24:07.400 回答