Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSLT:从参数创建数组并检查空值_Xml_Xslt_Xslt 1.0 - Fatal编程技术网

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

Xml XSLT:从参数创建数组并检查空值,xml,xslt,xslt-1.0,Xml,Xslt,Xslt 1.0,基本上,有一个必要的参数列表是由使用PHP的开发人员创建的。他正在将这些内容传递到我的XSLT中,我需要创建一个“检查”来确保每个内容都已填充 是否有一种方法可以创建这些参数的数组并循环它们,而不是为每个参数创建IF语句 参数为: <xsl:param name="enviroment_url_prefix"/> <xsl:param name="display_layout" /> <xsl:param name="content_t

基本上,有一个必要的参数列表是由使用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>

$current_参数为空
参数名称上的循环需要动态求值,XSLT不支持动态求值。您可以在参数元素(
document(“”)/*/xsl:param
)上为每个参数调用一个,但这仍然不会给出每个参数的运行时值

除了单独硬编码之外,您不能从样式表中执行这些检查


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

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


并将其作为其唯一的
传递给主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端进行输入验证可能会容易得多。

循环参数名称将需要动态求值,而XSLT不支持动态求值。您可以在参数元素(
document(“”)/*/xsl:param
)上为每个参数调用一个,但这仍然不会给出每个参数的运行时值

除了单独硬编码之外,您不能从样式表中执行这些检查


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

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


并将其作为其唯一的
传递给主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端进行输入验证可能会容易得多。

非常感谢,这是一个好主意!我真的很感谢你花时间帮我看完它。好东西。非常感谢你,这是个好主意!我真的很感谢你花时间帮我看完它。好东西。