2010-05-05 2 views
2

У меня есть:XSLT пары условной проверка

<xsl:param name="SomeFlag" /> 

В моем шаблоне XSLT, я хочу сделать проверку условий на SomeFlag. В настоящее время я делаю это как:

<xsl:if test="$SomeFlag = true"> SomeFlag is true! </xsl:if> 

Это как мы оцениваем флаг?

я устанавливаю параметров в C#, как:

xslarg.AddParam("SomeFlag", String.Empty, true); 

Любые идеи?

+0

Хороший вопрос (+1). –

ответ

4
<xsl:if test="$SomeFlag = true"> 

Это тесты, если $SomeFlag равно значению строки элемента с именем «истина», который является первым ребенком текущего узла.

Что вы хотите:

<xsl:if test="$SomeFlag = true()"> 
3

Я согласен с Dimitre, но есть дополнение:

В вашем случае вы можете просто использовать:

<xsl:if test="$SomeFlag"> SomeFlag is true! </xsl:if>  

Но я обычно используйте 1 и 0 для булевых флагов, когда флаги должны оцениваться в XSLT, особенно когда я беру значение из атрибута или содержимого элемента.

Это позволяет мне проверить условия литьем по номерам (а затем неявно булево) вместо сравнения с строкового литерала:

<xsl:if test="number($SomeFlag)"> SomeFlag is true! </xsl:if> 
+0

Я никогда не предлагал сравнить с натянутым литералом! Пожалуйста, прочитайте мой ответ и поймите. Также обратите внимание, что OP устанавливает значение, которое должно быть проверено на C#, и использует значение * boolean *! Итак, ваше дополнение (хотя в целом полезно), не отвечает на вопрос. –

+1

@Dimitre Novatchev: Я понимаю ваш ответ, моя идея состоит в том, чтобы использовать только 0 и 1 вместо булевых значений. Таким образом, если OP будет сериализовать значение в входном дереве вместо передачи как параметра, подход останется прежним. – newtover

Смежные вопросы