XSLT:从参数创建数组并检查空值

时间:2013-06-24 16:31:38

标签: xml xslt xslt-1.0

基本上有一个由开发人员使用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" />

我的支票状态如下所示:

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

1 个答案:

答案 0 :(得分:1)

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

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


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

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

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

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

如果由于某种原因这是不可能的,那么让你的程序员提供一个URL来加载和使用这个XML文档:

<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端进行输入验证可能要容易得多。