Как я могу напечатать одну <div>, не закрывая ее в XSLT - PullRequest
2 голосов
/ 13 сентября 2010

В основном мне нужно открыть div в одном операторе if и закрыть его в другом.Я попытался

<xsl:value-of select="'<div>'"/>

, но это не удалось, потому что <и> не разрешены в атрибутах.Есть идеи?Приветствия

Ответы [ 4 ]

5 голосов
/ 13 сентября 2010

Если вы хотите вывести некоторый контент независимо от каких-либо условий, но оберните контент в <div> в зависимости от условия:

  <xsl:choose>
     <xsl:when test="myConditionIsTrue">
        <div>
           <xsl:call-template name="bar"/>
        </div>
     </xsl:when>
     <xsl:otherwise>
        <xsl:call-template name="bar"/>            
     </xsl:otherwise>
  </xsl:choose>

Вы можете изменить <xsl:call-template> на <xsl:apply-templates> или <xsl:value-of select="$myvariable" /> и т. Д. В зависимости от того, что является инвариантным содержимым.

Таким образом, вы будете рассматривать древовидную структуру как древовидную структуру, используя мощь процессора на основе дерева XML вместо того, чтобы пытаться бороться с ним. DOE может работать во многих случаях, но он не переносим, ​​потому что процессоры XSLT не обязаны соблюдать его. На самом деле они не могут, если они не отвечают за сериализацию в конкретном конвейере. Приведенный выше метод позволяет избежать этой проблемы.

3 голосов
/ 13 сентября 2010

Это работает:

<xsl:text disable-output-escaping="yes">&lt;div&gt;</xsl:text>

Спасибо @Alejandro за подсказку в комментариях

1 голос
/ 13 сентября 2010

Если вы просто распечатываете его, вы можете использовать html-сущности &lt; и &gt; вместо < и >.

0 голосов
/ 13 сентября 2010

Обычно это плохая практика, так как вы всегда должны открывать и закрывать теги выходных данных на одном уровне. В противном случае, вы смотрите на потенциальный кошмар "где я должен был это закрыть?" вопросы в будущем. Тем не менее, это может работать:

<xsl:text disable-output-escaping="yes">&lt;div&gt;</xsl:text>

(РЕДАКТИРОВАТЬ: Забыл добавить экранирование выхода)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...