Тест строки атрибута XSLT - PullRequest
       0

Тест строки атрибута XSLT

0 голосов
/ 11 сентября 2018

Я редактирую существующий XSLT, чтобы я мог изменить отображение содержимого, чтобы оно отображалось на вкладках. Я использовал одну из строковых переменных для назначения идентификатора div для индивидуального стиля. Сейчас я пытаюсь проверить этот новый атрибут id для имени первой вкладки, а затем устанавливаю стиль на display:block для этой одной вкладки. Я знаю, что условие WHEN обрабатывается, потому что к div применяется стиль, но все это display:none.

Я не особенно хорош в XSLT (крутая кривая обучения), но у меня все получилось, кроме последнего, и я полагаю, что это только потому, что я не знаю правильный синтаксис. Вот блок, с которым я работаю. Показывает весь блок div, но важны первые дюжины строк:

  <div class="container">
<xsl:attribute name="id">
    <xsl:value-of select="substring($tmpTitle, 1, 5)"/>
</xsl:attribute>
<xsl:choose>
        <xsl:when test="@id='First'">
             <xsl:attribute name="style">display:block</xsl:attribute>
        </xsl:when>
        <xsl:otherwise>
            <xsl:attribute name="style">display:none</xsl:attribute>
        </xsl:otherwise>
</xsl:choose>

<li>

    <h2>
        <xsl:value-of select="$tmpTitle"/>
    </h2>

    <xsl:if test="$listType != ''">
        <a class="guidelinesLink">
            <xsl:attribute name="href">
                <xsl:apply-templates select="link"/>
            </xsl:attribute>
            <xsl:value-of select="link/url-text"/>
        </a>
    </xsl:if>


    <ul class="itemList">
        <xsl:apply-templates select="//item[../title = $tmpTitle or ../title-ddl = $tmpTitle]">
            <xsl:sort select="title"/>
        </xsl:apply-templates>
    </ul>

</li>
</div>

1 Ответ

0 голосов
/ 11 сентября 2018

XML, который вы преобразовываете, не имеет значения @id who, равного First, поэтому test="@id='First'" всегда будет ложным и упадет до xsl:otherwise.

Вместо этого свяжите значение, которое вы используете для создания @id, с переменной и используйте эту переменную как для создания атрибута @id, так и для определения, какое значение присваивать @style.

Кроме того, если вы всегда собираетесь создавать атрибут @style, вы можете переместить xsl:choose в xsl:attribute и объявить его только один раз:

<div class="container">
  <xsl:variable name="identifier" select="substring($tmpTitle, 1, 5)"/>
  <xsl:attribute name="id">
    <xsl:value-of select="$identifier"/>
  </xsl:attribute>
  <xsl:attribute name="style">
    <xsl:text>display:</xsl:text>
    <xsl:choose>
      <xsl:when test="$identifier='First'">
        <xsl:text>block</xsl:text>
      </xsl:when>
      <xsl:otherwise>
        <xsl:text>none</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:attribute>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...