XSLT: Как создать условную ссылку без дублирования кода - PullRequest
2 голосов
/ 21 июля 2010

Сгенерированная HTML-страница содержит ссылки, которые иногда отсутствуют на моей странице.Я должен отобразить эту ссылку в виде простой метки.В настоящее время это делается:

<xsl:choose>
 <xsl:when test="$nb_action != 0">
  <a href="#action">Action (offensive, defensive, reconnaissance)</a>
 </xsl:when>
 <xsl:otherwise>
  Action (offensive, defensive, reconnaissance)
 </xsl:otherwise>
</xsl:choose>

Мне интересно, как упростить мой код, как деактивировать узел <a></a>?

Моей первой идеей было делегировать специальный класс CSS:1007 *

<a href="#action">
 <xsl:if test="$nb_action = 0">
  <xsl:attribute name="class">inactive</xsl:attribute>
 </xsl:if>Action (offensive, defensive, reconnaissance)
</a>

Но это остается ссылкой ...

Обходное решение, следующее:

<a><xsl:if test="$nb_action != 0">
  <xsl:attribute name="href">#action</xsl:attribute>
 </xsl:if>Action (offensive, defensive, reconnaissance)</a>

Правильно написать html <a> тег без href?

Ответы [ 2 ]

2 голосов
/ 21 июля 2010

Вы можете сделать этот текст Action как переменную.Эта переменная по-прежнему отображается в трех местах.

<xsl:variable name="textval">
Action (offensive, defensive, reconnaissance)</xsl:variable>
<xsl:choose>
 <xsl:when test="0">
  <a href="#action"><xsl:copy-of select="$textval"/></a>
 </xsl:when>
 <xsl:otherwise>
  <xsl:copy-of select="$textval"/>
 </xsl:otherwise>
</xsl:choose>

Редактировать: в качестве альтернативы, если вы не возражаете против лишнего, бесполезного тега span, вы можете использовать

  <xsl:variable name="condition" select="---condition-here---"/>

  <xsl:variable name="tagname">
   <xsl:choose>
    <xsl:when test="$condition">a</xsl:when>
    <xsl:otherwise>span</xsl:otherwise>
   </xsl:choose>
  </xsl:variable>

  <xsl:element name="{$tagname}">
   <xsl:if test="$condition">
    <xsl:attribute name="href">#action</xsl:attribute>
   </xsl:if>
   Action (offensive, defensive, reconnaissance)
  </xsl:element>

(В Firefox, если мы установим $tagname в пустую строку, элемент вообще не будет применяться. Но процессор также может вызвать ошибку , поэтому не полагайтесь на нее.)

0 голосов
/ 21 июля 2010

Что не храните строку Action (..) в переменной и в коде?

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