2016-09-28 1 views
0

я иметь следующую структуру:Почему у меня заканчивается 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>&#10;</xsl:text> 
    </xsl:if> 
    </xsl:for-each> 
</xsl:template> 

</xsl:stylesheet> 

Это работает точно так же, как я хочу, чтобы, если я только для отображения XML в Firefox, с XSLT в качестве таблицы стилей. Но если я применил преобразование в MatLab, полученный HTML будет сгенерирован с дополнительными 8 пробелами после $1&#xA;. MatLab использует Saxon 6.5.5 для обработки XSLT.

Я попытался с помощью следующего шаблона обрезать строку, но это не имеет никакого значения:

<xsl:template name="trim"> 
    <xsl:param name="str"/> 
    <xsl:choose> 
    <xsl:when test="string-length($str) &gt; 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) &gt; 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

+0

Ваш XSLT выше имеет этот нечетный символ '¨' на предпоследней линии. Это объясняет неожиданный результат. – Tomalak

+1

Пожалуйста, напишите полный, ** воспроизводимый пример **. Выбранный шаблон имеет недопустимый синтаксис (например, ' '), и мы не видим заголовки таблиц стилей - esp.' Xsl: output' –

+0

Извините, теперь есть более полный и правильный пример. Я работаю над сетью с воздушным фильтром, поэтому примеры здесь - это боль, и ошибки легко ползут. – Fylke

ответ

1

Отступ, по-видимому, является попыткой саксонского процессора сделать код HTML более симпатичным. Ни Xalan, ни libxslt не производят подобный отступ.

Поскольку браузеры HTML игнорируют лишние символы пробела, добавление безвредно, и я не вижу причин, по которым вам следует беспокоиться.

Изменение метода вывода на xml удалит отступ, потому что в отличие от HTML, пробел может быть критическим.

+0

Как вы думаете, я должен попытаться зарегистрировать это как ошибку в отношении саксонской? – Fylke

+0

@Fylke Я бы попробовал добавить тег 'saxon' к вашему вопросу в первую очередь - это может привести к более авторитетной реакции, чем я могу предоставить. –

Смежные вопросы