Как не выводить Whitespace в XSLT для элемента, который имеет атрибуты
-
25-09-2019 - |
Вопрос
У меня есть документ XSLT, и я хочу выводить якор (а) тег с некоторыми атрибутами, значения которых зависят от других вещей. Таким образом, я использую тег XSL: атрибут с выбором / если под ним (или наоборот). Так что мой код выглядит так:
<a href="/somepage.html">
<xsl:if test="current_page='this_page'">
<xsl:attribute name='class'>active</xsl:attribute>
</xsl:if>
My Page
</a>
Однако проблема в том, что в выходном HTML все входные данные / пробелы есть, что в конечном итоге заставляет мою ссылку иметь дополнительное пространство слева от него (и она подчеркнута, что делает его очевидным). Так что очевидное решение - это сделать:
<a href="/somepage.html"><xsl:if test="current_page='this_page'"><xsl:attribute name='class'>active</xsl:attribute></xsl:if>My Page</a>
избавиться от пространства. Не слишком большой сделку в вышеуказанном коде, но моя фактическая страница имеет намного больше логики, что делает это действительно уродливым. Единственная вещь, которую я могу придумать, о том, чтобы очистить это, это поставить логику вне поколения ссылок, но я повторяю все больше и необходимость создавать больше переменных. Что разумно, но все еще не совсем идеально. Это всего лишь один пример, где я хотел сделать это, это произошло несколько раз, поэтому мне просто интересно, если есть какие-либо другие способы решения этого.
Решение
Может быть, вы можете использовать это в начале документа XSLT:
<xsl:strip-space elements="a"/>
Обновлять, это работает:
<a href="/somepage.html">
<xsl:if test="current_page='this_page'">
<xsl:attribute name='class'>active</xsl:attribute>
</xsl:if>
<xsl:text>My Page</xsl:text>
</a>
Другие советы
Будет просто xsl:strip-space
В верхней части вашего стиля лист быть достаточным?
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes"/>
<xsl:strip-space elements="*"/>
...
</xsl:stylesheet>