Xml XSLT:从参数创建数组并检查空值
基本上,有一个必要的参数列表是由使用PHP的开发人员创建的。他正在将这些内容传递到我的XSLT中,我需要创建一个“检查”来确保每个内容都已填充 是否有一种方法可以创建这些参数的数组并循环它们,而不是为每个参数创建IF语句 参数为: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
<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端进行输入验证可能会容易得多。非常感谢,这是一个好主意!我真的很感谢你花时间帮我看完它。好东西。非常感谢你,这是个好主意!我真的很感谢你花时间帮我看完它。好东西。