Я редактирую существующий 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>
XML, который вы преобразовываете, не имеет @id
, значение которого равно 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>
Спасибо, это здорово по трем направлениям: 1) это устранило мою проблему 2) я понял это и 3) я кое-что узнал сегодня! Спасибо за помощь.
Вы не можете проверить атрибут
id
; он существует только в результирующем дереве. Вы можете либо проверить результат другого вызова substring (), либо использовать переменную для хранения результата вызова подстроки и проверить его (и использовать его как значениеid
).