Как не выводить пробелы в xslt для элемента, который имеет атрибуты - PullRequest
2 голосов
/ 27 сентября 2010

У меня есть документ xslt, и я хочу вывести тег anchor (a) с некоторыми атрибутами, значения которых зависят от других вещей. Таким образом, я использую тег xsl: attribute с параметром select / if под ним (или наоборот)Versa).Итак, мой код выглядит следующим образом:

<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>

, чтобы избавиться от места.Не так уж и сложно в приведенном выше коде, но моя настоящая страница содержит в себе гораздо больше логики, что делает ее действительно ужасной.Единственное, что я могу придумать, чтобы очистить это, - это вывести логику за пределы генерации ссылок, но затем я повторяю все больше и мне приходится создавать больше переменных.Что разумно, но все же не совсем идеально.Это всего лишь один пример, когда я хотел это сделать, это случилось несколько раз, поэтому мне просто было интересно, есть ли другие способы решения этой проблемы.

Ответы [ 2 ]

3 голосов
/ 27 сентября 2010

Возможно, вы могли бы использовать это в начале документа 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>
1 голос
/ 27 сентября 2010

Достаточно ли простого 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>
...