2017-02-10 7 views
-1

Если кто-то будет достаточно любезен, чтобы сказать мне, почему следующие <xsl:call-template name="Log"> не будут работать?Шаблон вызова XSLT внутри HTML

XML файла:

<?xml version="1.0" encoding="UTF-8"?> 
<TextMessages> 
    <Message>[Step]</Message> 
    <Message>Step ID: 1</Message> 
    <Message>Description</Message> 
</TextMessages> 

XSLT Файл:

<?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:template match="/"> 
<html> 
    <body> 
    <h2>My CD Collection &gt;</h2> 
    <p> 
     <xsl:call-template name="Log"> 
     </xsl:call-template> 
    </p> 
    </body> 
</html> 
</xsl:template> 

<xsl:template name ="Log"> 
    <xsl:variable name="break">&lt;br/&gt;</xsl:variable> 
    <xsl:for-each select="TextMessages"> 
     <p> 
     <xsl:value-of select="."/> 
     <xsl:value-of select="$break"/> 
     </p> 
    </xsl:for-each> 
</xsl:template> 
</xsl:stylesheet> 

разыскиваемого выход:

My CD Collection > 
[Step]<br/> 
Step ID: 1<br/> 
Description<br/> 

Реальная проблема также имеет параметры, которые я называю с параметрами, но не уверен, если это проблема.

<p> 
    <xsl:call-template name="Log"> 
    <xsl:with-param name="testId" select="@testId" /> 
    </xsl:call-template> 
</p> 

<xsl:template name ="Log"> 
    <xsl:param name="testId" /> 
    <xsl:variable name="break">&lt;br/&gt;</xsl:variable> 
    <xsl:for-each select="/t:TestRun/t:Results/t:UnitTestResult[@testId=$testId]/t:Output/t:TextMessages/t:Message"> 
     <p> 
     <xsl:value-of select="."/> 
     <xsl:value-of select="$break"/> 
     </p> 
    </xsl:for-each> 
    </xsl:template> 
+0

Что не работает? Он работает для меня с xsltproc .. – user993553

+0

@ user993553 Я думал, что w3c жизнеспособен для теста xsl, но он терпит неудачу. Результат просто написан в одной строке, без шаблона. Однако, протестирован с http://www.freeformatter.com/xsl-transformer.html#ad-output и кажется, что он работает. Нижняя часть все еще не работает в моем коде. – Emir

+0

Пожалуйста, покажите ожидаемый результат ** как код **. –

ответ

0

Если я правильно угадал, вы хотите изменить:

<xsl:template name ="Log"> 
    <xsl:variable name="break">&lt;br/&gt;</xsl:variable> 
    <xsl:for-each select="TextMessages"> 
     <p> 
     <xsl:value-of select="."/> 
     <xsl:value-of select="$break"/> 
     </p> 
    </xsl:for-each> 
</xsl:template> 

к:

<xsl:template name="Log"> 
    <xsl:for-each select="TextMessages/Message"> 
     <p> 
      <xsl:value-of select="."/> 
     </p> 
     <hr/> 
    </xsl:for-each> 
</xsl:template> 

Примечание:

  1. Вы никогда не должны использовать взломать как &lt;br/&gt; для вывода HTML или XM L действительная разметка;

  2. Я не уверен, почему вам нужно вызвать именованный шаблон здесь, а не просто включать xsl:for-each в первый шаблон или просто применить шаблоны к элементам Message.

+0

Спасибо за второе примечание, я удалил весь шаблон и сразу добавил 'xsl: for-each', в результате чего он отлично работал. – Emir

0

Добавление линии

<xsl:output method="text" version="1.0" encoding="UTF-8" /> 

в файл XSLT непосредственно после <xsl:stylesheet... > линии будет Вам (частично по желанию) результат

My CD Collection > 
[Step] 
Step ID: 1 
Description 

С "частично" я сослаться на первая строка, которую вы явно хотите вывести, включив в свой XSLT <h2>My CD Collection &gt;</h2>, но не указывая в тексте вывода.

+0

У меня в настоящее время '' и изменение его в текст мне не поможет. P.S. Отредактированный желаемый результат, спасибо за примечание. – Emir

+0

@Emir: Извините, но я не читаю эту строку в вашем XSLT-коде. Пожалуйста, добавьте его в свой вопрос, а также ваш _full_ желаемый результат. – zx485

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