如果在XSLT中定义

如果在XSLT中定义,xslt,Xslt,如何检查定义的变量$var01?问题是: <input type="text" name="search_do" style="width: 150px;" value="{$search_do}" /> 但它不起作用,如果未定义$search\u do,我会收到一条消息“运行时错误” 另外,我无法编辑php后端,只有XSL模板当未定义$search\u do时,它还没有被声明(在当前范围内) 很简单,XSLT中没有“条件变量定义”。它们有时无法定义,有时也无法定义,它们总是一

如何检查定义的变量$var01?问题是:

<input type="text" name="search_do" style="width: 150px;" value="{$search_do}" />

但它不起作用,如果未定义$search\u do,我会收到一条消息“运行时错误”


另外,我无法编辑php后端,只有XSL模板

当未定义
$search\u do
时,它还没有被声明(在当前范围内)

很简单,XSLT中没有“条件变量定义”。它们有时无法定义,有时也无法定义,它们总是一个或另一个。“已定义检查”完全没有必要,这就是为什么没有。您总是可以从代码中看到变量是否存在

不过,变量的作用域是严格限定的。仅在其父元素中有效。这意味着你不能这么做

<xsl:if test="some-condition">
  <xsl:variable name="search_do" value="foo" />
  <!-- search_do goes out of scope right away! -->
</xsl:if>

<!-- $search_do will not be valid here -->
<input type="text" name="search_do" value="{$search_do}" />

而是

<xsl:if test="some-condition">
  <xsl:variable name="search_do" value="foo" />

  <!-- use it as long as it is in scope -->
  <input type="text" name="search_do" value="{$search_do}" />
</xsl:if>

如果未定义
$search\u do
,则未声明它(在当前范围内)

很简单,XSLT中没有“条件变量定义”。它们有时无法定义,有时也无法定义,它们总是一个或另一个。“已定义检查”完全没有必要,这就是为什么没有。您总是可以从代码中看到变量是否存在

不过,变量的作用域是严格限定的。仅在其父元素中有效。这意味着你不能这么做

<xsl:if test="some-condition">
  <xsl:variable name="search_do" value="foo" />
  <!-- search_do goes out of scope right away! -->
</xsl:if>

<!-- $search_do will not be valid here -->
<input type="text" name="search_do" value="{$search_do}" />

而是

<xsl:if test="some-condition">
  <xsl:variable name="search_do" value="foo" />

  <!-- use it as long as it is in scope -->
  <input type="text" name="search_do" value="{$search_do}" />
</xsl:if>

如果未定义$search\u do,则表示它不在当前范围内。无法测试未定义的变量/参数。但是,您可以测试tyey是否未设置,并根据此信息进行操作

<xsl:template match="test">
    <xsl:param name="fred"/>
    <result>
        <xsl:if test="$fred">
            <test hasFred="true"></test>
        </xsl:if>

        <xsl:element name="test">
            <xsl:attribute name="hasFred">
                <xsl:choose>
                    <xsl:when test="$fred">
                        <xsl:text>true</xsl:text>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:text>true</xsl:text>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:attribute>
        </xsl:element>
    </result>
</xsl:template>

真的
真的

如果未定义$search\u do,则表示它不在当前范围内。无法测试未定义的变量/参数。但是,您可以测试tyey是否未设置,并根据此信息进行操作

<xsl:template match="test">
    <xsl:param name="fred"/>
    <result>
        <xsl:if test="$fred">
            <test hasFred="true"></test>
        </xsl:if>

        <xsl:element name="test">
            <xsl:attribute name="hasFred">
                <xsl:choose>
                    <xsl:when test="$fred">
                        <xsl:text>true</xsl:text>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:text>true</xsl:text>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:attribute>
        </xsl:element>
    </result>
</xsl:template>

真的
真的
您真正想要什么? 我认为,与其使用一个尚未定义的变量(定义未定义),不如使用一个默认值(类似于空字符串或空节点集)

请尝试以下操作:

<xsl:template match="foo">
  <xsl:param name="search_do"/>
  <input type="text" name="search_do" style="width: 150px;" value="{$search_do}" />
</xsl:template>

...
  <xsl:apply-templates/>
    <!-- ^^ uses the default -->
  <xsl:apply-templates><xsl:with-param name="search_do" select="5"/></xsl:apply-templates>
    <!-- ^^ sets an explicit value for search_do -->

...
您真正想要什么? 我认为,与其使用一个尚未定义的变量(定义未定义),不如使用一个默认值(类似于空字符串或空节点集)

请尝试以下操作:

<xsl:template match="foo">
  <xsl:param name="search_do"/>
  <input type="text" name="search_do" style="width: 150px;" value="{$search_do}" />
</xsl:template>

...
  <xsl:apply-templates/>
    <!-- ^^ uses the default -->
  <xsl:apply-templates><xsl:with-param name="search_do" select="5"/></xsl:apply-templates>
    <!-- ^^ sets an explicit value for search_do -->

...

$fred
可能被设置为空节点集、false或空字符串,您将无法通过
test=“$fred”
辨别差异。严格地说,你不能检查它是否被“设置”,你只能检查它的值。就我所理解的原始问题而言,没有必要测试某个值
$fred
。如果有必要的话,它显然可以实现。是的,您是对的,它只应用一个逻辑测试,类似于在JavaScript中使用
if(varname).
$fred
可以设置为空节点集、false或空字符串,您将无法通过
test=“$fred”
来区分它们之间的区别。严格地说,你不能检查它是否被“设置”,你只能检查它的值。就我所理解的原始问题而言,没有必要测试某个值
$fred
。如果有必要的话,它显然可以实现。是的,你是对的,它只应用一个逻辑测试,类似于在JavaScript中使用
if(varname).
$search\u do
可以在全局范围内定义,甚至在导入的文件中。是的,它可以。但也没有条件输入。您可以查看文件,看看变量是否存在。这在运行时没有什么变化。
$search\u do
可以在全局范围内定义,即使是在导入的文件中。是的,它可以。但也没有条件输入。您可以查看文件,看看变量是否存在。这在运行时是没有变化的。