2013-07-27 2 views
1

Довольно новый для xslt, и я пытаюсь написать шаблон xslt для целей генерации PDF.Соответствие шаблону XSLT с набором атрибутов режима не работает

Вот отрывок из входящего XML:

<element name="rootElement"> 
    <attributes /> 
    <elements> 
     <element name="childElement"> 
      <attributes> 
       <attribute name="attributename" value="Yes" /> 
      </attributes> 
     </element> 
    </elements> 
</element> 

Мне нужно, чтобы отобразить текст, специфичные для каждого дочернего элемента в дополнение к печати все имена элементов и соответствующих значений в табличной форме.

После выполнения некоторых исследований я думал, что это может быть достигнуто с помощью комбинации совпадений шаблонов и установки атрибута режима. Вот код, который я написал:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <xsl:template match="DOCUMENT"> 
     <xsl:apply-templates select="DATA" /> 
    </xsl:template> 

    <xsl:template match="DATA"> 

     <xsl:apply-templates select="element" /> 
     <xsl:apply-templates select="element" mode="test" /> 

    </xsl:template> 

    <xsl:template match="element"> 
     <fo:block font-size="18.0pt" font-family="Arial" 
      font-weight="bold"> 
      Display something I. 
     </fo:block> 
    </xsl:template> 

    <xsl:template match="element" mode="test"> 
     <fo:block font-size="18.0pt" font-family="Arial" 
      font-weight="bold"> 
      Display something II. 
     </fo:block> 
    </xsl:template> 
</xsl:stylesheet> 

Вот результат после выполнения:

<?xml version="1.0" encoding="UTF-8"?> 
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format" font-size="18.0pt" font-family="Arial" font-weight="bold"> 
      Display something I. 
</fo:block> 

Может кто-нибудь пожалуйста, скажите мне, почему матч шаблон с режимом не выполнять?

Любые мысли/решения/идеи будут высоко оценены.

+0

В шаблоне 'element' вам нужно« применить шаблоны », чтобы продолжить обработку дерева узлов, но каков ваш ожидаемый результат? – JLRishe

+0

Спасибо за ваш ответ - я надеялся на шаблон элемента с активируемым атрибутом режима и распечатал XML-текст, содержащий текст Display Something II, в дополнение к содержимому соответствия шаблона стандартного элемента. – user2624928

+0

Ваш текущий XSLT ищет элементы ** DOCUMENT ** и ** DATA **, которые вообще отсутствуют в вашем XML. Является ли ваш образец XML определенно правильным? –

ответ

0

Поскольку элемент DATA отсутствует, должно быть, что шаблон шаблона match = "element" вызывается из встроенного шаблона по умолчанию, который не применяет шаблон-шаблон с режимом = "тест".

0

Ни <xsl:template match="DOCUMENT">, ни <xsl:template match="DATA"> не выполняются.

Если изменить тебе второй шаблон:

<xsl:template match="/"> 

    <xsl:apply-templates select="element" /> 
    <xsl:apply-templates select="element" mode="test" /> 

</xsl:template> 

вы должны увидеть ваши ожидаемые результаты.

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