2016-06-09 1 views
0

У меня есть два шаблон, как это ... один, чтобы создать нормальное имя пакета, а другой, добавляемый «-Non» с именем, если он проходит определенные условия, как показаноКак звонить шаблон из другого шаблона в XSLT 1.0

<xsl:template match="text()" name="checkForAgency"> 
    <xsl:param name="Name"/> 
    <xsl:param name="Agency"/> 
    <xsl:if test="contains($Agency,'AG') "> 
    <xsl:value-of select="concat($Name,' - Non')"/> 
    </xsl:if> 
</xsl:template> 
<xsl:template match="text()" name="createPackageName"> 
    <xsl:param name="Type"/> 
    <xsl:if test="contains($Type,'NEW')"> 
    <xsl:value-of select="concat('New',' Goal')"/> 
    </xsl:if> 
    <xsl:if test="contains($Type,'AMD')"> 
    <xsl:value-of select="concat('Amended',' Goal')"/> 
    </xsl:if> 
    <xsl:if test="contains($Type,'REN') or contains($Type,'ARN')"> 
    <xsl:value-of select="concat('Renewal',' Goal')"/> 
    </xsl:if> 
</xsl:template> 

Вызов этих шаблонов из

<xsl:variable name="NonAgencyPackageName"> 
    <xsl:call-template name="createPackageName"> 
    <xsl:with-param name="Type" select="ID"/> 
    </xsl:call-template> 
</xsl:variable> 
<xsl:element name="PackageName"> 
    <xsl:call-template name="checkForAgency"> 
    <xsl:with-param name="Name" select="$NonAgencyPackageName"/> 
    <xsl:with-param name="Agency" select="Output"/> 
    </xsl:call-template> 
</xsl:element> 

Если идентификатор «New», имя пакета должно быть новая цель, и если выход имеет «AG», то имя должно быть Новый Goal- Non. Иное имя должно быть новой целью. Я хочу только два отдельных шаблона. Сейчас я получаю пустое значение. Пожалуйста, помогите мне в достижении этого и как его исправить?

+0

шаблоны с двумя символами 'match =' и 'name =' Я никогда не видел - он либо имеет 'match =' (и, возможно, 'mode = ') или' name = ', но не' match = ', тогда предложите снова вытащить свою книгу xslt :) Или покажите (отредактируйте вопрос), что ваш вход и ожидаемый выход xmls выглядят как –

+0

@StefanHegny имеет право предложить вам проверьте свои шаблоны: если вы не делаете что-то очень умное в остальной части таблицы стилей (и если бы вы были такими умными, у вас не было бы этого вопроса), бессмысленно иметь атрибут 'match' для названных шаблонов. Не незаконно (шаблоны с 'match' и' name' просто прекрасны), но в этом конкретном случае бессмысленно и, таким образом, запутывает программиста по обслуживанию. –

ответ

0

Угадайте, что XPaths ID и Output не выбирают то, что вы ожидаете, поэтому все условные ошибки терпят неудачу. Поскольку вы не предоставляете XML-вход, невозможно быть уверенным.

Задайте себе несколько вопросов:

  • Когда этот код вычисляется, то, что текущий элемент?
  • Имеет ли этот элемент дочерний элемент с именем ID?
  • Каково строковое значение этого элемента?
  • Имеет ли он дочерний элемент с именем Output?
  • Каково его строковое значение?

Элемент PackageName, который вы создаете, будет непустым, только если есть дочерний элемент Output, а его строковое значение содержит последовательность «AG». Он будет содержать строку «Новая цель - Non», только если дочерний элемент Output содержит «AG», а идентификатор child содержит NEW. Никакая сила в создании не могла заставить ее иметь значение «Новая цель», так как шаблон CheckForAgency либо создает значение, заканчивающееся на «- Non», либо без вывода. (Возможно, вы захотите прочитать инструкцию «выбрать/когда» в XSLT.)