如果在XSLT中定义
如何检查定义的变量$var01?问题是:如果在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中没有“条件变量定义”。它们有时无法定义,有时也无法定义,它们总是一
<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
可以在全局范围内定义,即使是在导入的文件中。是的,它可以。但也没有条件输入。您可以查看文件,看看变量是否存在。这在运行时是没有变化的。