если определено в XSLT - PullRequest
       14

если определено в XSLT

0 голосов
/ 18 февраля 2010

Как я могу проверить определенную переменную $ var01 или нет?Проблема в следующем:

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

Но это не работает, у меня есть сообщение "Ошибка выполнения" , если $ search_do не определено.

PSЯ не могу редактировать php-сервер, просто шаблон XSL

Ответы [ 3 ]

5 голосов
/ 18 февраля 2010

Если $search_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>
1 голос
/ 18 февраля 2010

Если $ search_do не определено, это означает, что его нет в текущей области видимости. Вы не можете проверить переменные / параметры, которые не определены. Однако вы можете проверить, не заданы ли они, и действовать в соответствии с этой информацией.

<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>
0 голосов
/ 18 февраля 2010

Что вы действительно хотите?

Я думаю, что вместо использования переменной, которая не была определена (которая по определению не определена), вам нужно значение по умолчанию (что-то вроде пустой строки или набора пустых узлов).

Попробуйте что-то вроде следующего:

<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 -->
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...