я иметь следующую структуру:Почему у меня заканчивается 8 дополнительных пробелов при применении преобразования из MatLab вместо того, чтобы позволить Firefox обрабатывать его?
<suite>
<faults>
<fault componentName="comp1">
<introduceWhen>Time1</introduceWhen>
<signals>
<signal name="sig11" value="1"/>
<signal name="sig22" value="1"/>
</signals>
</fault>
<fault componentName="comp2">
<introduceWhen>Time2</introduceWhen>
<signals>
<signal name="sig44" value="0"/>
</signals>
</fault>
</faults>
</suite>
И используя follwing шаблон я извлечь некоторые данные и поместить его в ячейку таблицы, которая имеет white-space: pre
набор для того, чтобы позволить мне поставить каждую ошибку на новой строке.
<?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:output doctype-system="http://www.w3.org/TR/html4/strict.dtd"/>
<xsl:output doctype-public="-//W3C//DTD HTML 4.01//EN"/>
<xsl:template match="/suite">
<html>
<head>
<title>Space Demo</title>
<style>
td.faults {text-align: left; white-space: pre;}
</style>
</head>
<body>
<table>
<tr>
<td class="faults">
<xsl:apply-templates select="faults"/>
</td>
</tr>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="faults">
<xsl:for-each select="fault">
<xsl:value-of select="concat(@componentName, ' ', introduceWhen, ' ')"/>
<xsl:for-each select="signals/signal">
<xsl:value-of select="concat(@value, ' ')"/>
</xsl:for-each>
<xsl:if test="position()!=last()">
<xsl:text> </xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Это работает точно так же, как я хочу, чтобы, если я только для отображения XML в Firefox, с XSLT в качестве таблицы стилей. Но если я применил преобразование в MatLab, полученный HTML будет сгенерирован с дополнительными 8 пробелами после $1

. MatLab использует Saxon 6.5.5 для обработки XSLT.
Я попытался с помощью следующего шаблона обрезать строку, но это не имеет никакого значения:
<xsl:template name="trim">
<xsl:param name="str"/>
<xsl:choose>
<xsl:when test="string-length($str) > 0 and substring($str, 1, 1) = ' '">
<xsl:call-template name="trim">
<xsl:with-param name="str">
<xsl:value-of select="substring($str, 2)"/>
</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:when test="string-length($str) > 0 and substring($str, string-length($str)) = ' '">
<xsl:call-template name="trim">
<xsl:with-param name="str">
<xsl:value-of select="substring($str, 1, string-length($str)-1)"/>
</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$str"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Что я могу сделать, чтобы избавиться от лишних 8 пробелов? Здесь есть рабочий пример такого поведения: http://xsltransform.net/jz1PuP4
Ваш XSLT выше имеет этот нечетный символ '¨' на предпоследней линии. Это объясняет неожиданный результат. – Tomalak
Пожалуйста, напишите полный, ** воспроизводимый пример **. Выбранный шаблон имеет недопустимый синтаксис (например, ' '), и мы не видим заголовки таблиц стилей - esp.' Xsl: output' –
Извините, теперь есть более полный и правильный пример. Я работаю над сетью с воздушным фильтром, поэтому примеры здесь - это боль, и ошибки легко ползут. – Fylke