Как не выводить Whitespace в XSLT для элемента, который имеет атрибуты

StackOverflow https://stackoverflow.com/questions/3807194

  •  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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top