2013-09-09 6 views
0

Я передаю файл XML в мой Fo-файл, который выглядит как:Использование XSL: стоимость не в XSL: шаблон «s

<?xml version="1.0"?> 
    <activityExport> 
    <resourceKey> 
    <key>monthName</key> 
    <value>January</value> 
    </resourceKey> 

Так что, если я непосредственно использовать:

<xsl:value-of select="activityExport/resourceKey[key='monthName']/value"/> 

I может видеть «январь» в моем PDF-файле просто отлично.

Однако, если я использую его, как это в шаблоне у меня есть:

<xsl:template name="format-month"> 
    <xsl:param name="date"/> 
    <xsl:param name="month" select="format-number(substring($date,6,2), '##')"/> 
    <xsl:param name="format" select="'m'"/> 
    <xsl:param name="month-word"> 
     <xsl:choose> 
      <xsl:when test="$month = 1"><xsl:value-of select="activityExport/resourceKey[key='monthName']/value"/> 
</xsl:when> 

Тогда я не вижу «Январь», когда я звоню:

<xsl:variable name="monthName"> 
    <xsl:call-template name="format-month"> 
    <xsl:with-param name="format" select="'M'"/> 
    <xsl:with-param name="month" select="@monthValue"/> 
    </xsl:call-template> 
    </xsl:variable> 
    <xsl:value-of select="concat($monthName,' ',@yearValue)"/> 

Я знаю, что мой шаблон работает, потому что если у меня есть статическая строка в:

 <xsl:choose> 
      <xsl:when test="$month = 1">Januaryyy</xsl:when> 

Затем я вижу, как прекрасно видно январь.

Так шаблонные работы, ресурс существует, но стоимость из-выбора не работает внутри вызова-шаблона или XSL: выбрать или XSL: когда тест

Любая помощь? С уважением!

+0

Возможно ли опубликовать весь XML, который вы пытаетесь преобразовать? Без этого трудно понять, почему XPath не находит то, что вы хотите. –

+0

Кроме того, параметры 'xsl: value-of' недопустимы в вашем шаблоне. Он должен читать '' –

+0

@BenL Что касается вашего первого комментария, я скоро. Однако, когда я пытаюсь выполнить , я вижу, что значение просто отлично, поэтому значение определенно находится в XML. Что касается вашего второго комментария, то это miskate, я только задал вопрос.Я отредактировал его. –

ответ

2

Ваш шаблон, вероятно, прекрасен, за исключением того, что вы вызываете его из непригодной позиции в вашем XML. Поэтому XPath, который вы используете для установки month-word, ничего не находит - это путь к ничто.

Например, следующие таблицы стилей XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:output method="text"/> 

    <xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template name="format-month"> 
    <xsl:param name="date"/> 
    <xsl:param name="month" select="format-number(substring($date,6,2), '##')"/> 
    <xsl:param name="format" select="'m'"/> 
    <xsl:param name="month-word"> 
     <xsl:choose> 
     <xsl:when test="$month = 1"> 
      <xsl:value-of select="activityExport/resourceKey[key='monthName']/value"/> 
     </xsl:when> 
     </xsl:choose> 
    </xsl:param> 

    <xsl:value-of select="$month-word"/> 
    </xsl:template> 

    <xsl:template match="/"> 
    <xsl:variable name="monthName"> 
     <xsl:call-template name="format-month"> 
     <xsl:with-param name="month" select=" '1' "/> 
     <xsl:with-param name="format" select="'M'"/> 
     </xsl:call-template> 
    </xsl:variable> 

    <xsl:value-of select="concat($monthName,' ',@yearValue)"/> 
    </xsl:template> 

</xsl:stylesheet> 

применяется к этому XML:

<activityExport> 
    <resourceKey> 
    <key>monthName</key> 
    <value>January</value> 
    </resourceKey> 
</activityExport> 

производит этот выход:

January 

Обратите внимание, что я заменил параметр month на ваш шаблон со значением 1. Никакие элементы в этом входном XML не имеют атрибута @monthValue (что и заставило меня поверить, что вы вызываете шаблон из неподходящего места), и поэтому month-word не будет установлен ни из-за xsl:choose.

Чтобы сделать работу с реальным входным XML, можно попробовать заменить XPath с "//activityExport/resourceKey[key='monthName']/value" где двойной слэш определяет путь к везде в пределах документа XML. Это должно быть хорошо, если есть только один узел activityExport. В противном случае вам нужно будет разработать подходящий XPath.

+0

Спасибо. Работает как шарм, отличный ответ! –