【问题标题】:Check if a parameter exists in XSLT before using it使用前检查 XSLT 中是否存在参数
【发布时间】:2012-05-21 20:48:16
【问题描述】:

我正在使用 XPATH 来确定我的参数 $test 是否存在。 我在 ALtova Stylevision 中使用 XPATH 构建器,并认为我可以使用类似的东西 exists ( $blah) 或 exists ( string($blah) ) 但这以

结束

" Undefined variable in expression test="exists( string( $blah) )""

问题在于,有时该参数会存在,有时则不存在。我不想在空白参数中硬编码!

有没有办法在我使用它之前说“检查参数 XXXX 是否存在”?这很令人沮丧,因为我知道如何在几乎所有其他编程语言中做到这一点

参数定义:

<xsl:param name="blah"> some text </xsl:param>

这些参数是从单独的文件“parameters.xslt”中读取的。此文件可能存在也可能不存在,具体取决于场景。在尝试使用它之前,我需要检查参数是否确实存在。

【问题讨论】:

    标签: xml xslt altova


    【解决方案1】:

    基本上,如果您正在编写 XSLT,那么您应该知道声明了哪些变量。您正在尝试使用某种开发模型,在这种模型中,编写样式表的不同模块的人并不完全了解彼此的代码,而 XSLT 并不是为使用该模型而设计的。

    XSLT 在这方面几乎不是独一无二的:您不会在 Java 方法中找到任何东西允许方法的编写者询问“调用者提供了多少参数?”。如果提供的参数不足,代码将无法编译。

    【讨论】:

      【解决方案2】:

      如果你声明了参数,它就存在。你想知道的是,does it have a value?

      <xsl:choose>
        <xsl:when test="not($blah)">$blah wasn’t passed in</xsl:when>
        <xsl:otherwise>$blah was passed in</xsl:otherwise>
      </xsl:choose>
      

      【讨论】:

      • 问题是参数是从参数文件“Parameters.xslt”中拖进来的。有时,根据具体情况,不需要此文件。所以我需要做的是检查参数是否实际存在/是否已创建。9这是否可能?)从好的方面来说,“NOT()”适用于参数确实存在的情况。
      • 啊。不,我不相信有一种方法可以在不知道参数是否存在的情况下检查它。您是否有条件地添加&lt;xsl:import/&gt; 或&lt;xsl:include/&gt;?如果是这样,在包含 Parameters.xslt 时包含 &lt;xsl:variable name='included-parameters' select='true()'/&gt; 之类的内容,而在未包含时包含 &lt;xsl:variable name='included-parameters' select='false()'/&gt; 怎么样?
      • 当我说“有条件地添加”时,我的意思是当您生成样式表时一定会发生这种情况,对吧?因为我相信import/include 只能是stylesheet 的直接子代,而不是if。
      • 嗯,我喜欢这个主意。该文件是使用&lt;xsl:import/&gt; 导入的,但通过 Stylevision 完成(不确定它是否是动态完成的),所以我将不得不先寻找一种编辑导入的方法:)
      • 看来我将不得不创建一个带有空白参数的全局文件,我认为!感谢您的帮助
      猜你喜欢
      • 2011-06-09
      • 2012-01-08
      • 2016-08-29
      • 2022-01-17
      • 2011-01-18
      • 2011-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多