1

基本上,有一个由开发人员使用 PHP 创建的必要参数列表。他将这些传递到我的 XSLT 中,我需要创建一个“检查”以确保每个都被填充。

有没有办法创建这些参数的数组并循环遍历它们,而不是为每个参数创建 IF 语句?

参数是:

     <xsl:param name="enviroment_url_prefix"/>
     <xsl:param name="display_layout" />
     <xsl:param name="content_title" />
     <xsl:param name="content_descr" />
     <xsl:param name="num_comments" />
     <xsl:param name="num_items" />
     <xsl:param name="display_theme" />
     <xsl:param name="is_web"  />
     <xsl:param name="is_trial"  />
     <xsl:param name="img_width" />
     <xsl:param name="image_width" />
     <xsl:param name="time_ago" />

我的 Check 语句看起来像这样:

      <xsl:if test="$current_param=''">
        <xsl:message terminate="yes">
          $current_param is empty
        </xsl:message>
      </xsl:if>
4

1 回答 1

1

对参数名称的循环需要动态评估,而 XSLT 不支持这种情况。您可以在参数元素上调用 for-each ( document('')/*/xsl:param),但这仍然不会为您提供每个参数的运行时值。

除了单独对它们进行硬编码之外,您不能以任何其他方式从样式表中进行这些检查。


作为一个想法,您可以使用单个 XML 文档作为 XSLT 程序的输入,而不是参数列表。

像这样构建一个 XML 文件(或者让您的程序员同事首先创建它):

<params>
  <param name="enviroment_url_prefix" value="{whatever value came from PHP}" />
  <!-- ... -->
</params>

并将其作为唯一的 XSLT 样式表传递给您的主 XSLT 样式表<xsl:param name="input" />- 不是作为字符串,而是作为实际的文档对象。

如果由于某种原因无法做到这一点,请让您的程序员同事提供一个可以加载和使用此 XML 文档的 URL:

<xsl:variable name="input" select="document($params_url)" />
<xsl:variable name="p" select="$input/params/param" />

现在你有一个可以检查的实际树:

<xsl:for-each select="$p[@value = '']">
  <xsl:message terminate="yes">
    <xsl:value-of select="concat(@name, ' is empty')" />
  </xsl:message>
</xsl:if>

并使用:

<xsl:value-of select="$p[@name='enviroment_url_prefix']" />

话虽如此,最终在 PHP 端进行输入验证可能会容易得多。

于 2013-06-24T17:36:41.843 回答