В одном из комментариев (к удаленному ответу) вы сказали, что ваш вклад выглядит следующим образом:
<image>
someimage.jpg</image>
Отсюда и начинается ваш перевод строки - он является частью значения узла и поэтому сохраняется процессором XSL (он не «добавляется», как вы и предполагали).
Чтобы удалить пробел, вы должны изменить значение узла, прежде чем выводить его, лучше всего подходит в этом случае функция normalize-space()
, так как URL, как правило, не содержат пробелов.
<td>
<img src="{normalize-space(image)}"/>
</td>
Если у вас есть шанс, это должно быть исправлено в процессе, который генерирует входной XML, поскольку сам XML уже неверен. Если символ новой строки не является частью данных, он не должен быть там в первую очередь.
Вопреки тому, что предложили многие другие, ваш XSLT-код не влияет на вывод. Все пробелы удаляются из таблицы стилей XSL перед началом обработки, так что это:
<td>
<xsl:element name="img">
<xsl:attribute name="src">
<xsl:value-of select="image" />
</xsl:attribute>
</xsl:element>
</td>
хотя излишне многословно, эквивалентно этому:
<td>
<xsl:element name="img"><xsl:attribute name="src"><xsl:value-of select="image" /></xsl:attribute>
</xsl:element>
</td>
эквивалентно этому в отношении выходных пробелов:
<td><img src="{image}"/></td>
Однако, если в вашем XSL-коде есть паразитные узлы, все пробелы вокруг них сохраняются. Это означает, что вы не должны делать это:
<td>
Stray Text
</td>
Так как это сгенерирует "\n Stray Text\n "
текстовый узел в выводе. Лучше это:
<td>
<xsl:text>Contained Text</xsl:text>
</td>
Относительно: "Но почему <xsl:strip-space>
не работает?" Рекомендую прочитать Ответ Павла Минаева именно на этот вопрос .