как снова преобразовать вывод XML, полученный из XSLT - PullRequest
0 голосов
/ 12 апреля 2019

Можно ли как-нибудь использовать XSLT для повторной обработки (во второй раз) XML-кода, полученного во время первой обработки?

Чтобы быть более понятным,

Я получил следующеевывод, в то время как преобразование продолжается,

<processPrototypes>
     <orderPrecedenceSpec origin="xxx"
                          target="yyy"
                          orderType="directOrder"/>
     <orderPrecedenceSpec origin="abc"
                          target="lmn"
                          orderType="directOrder"/>
     <orderPrecedenceSpec origin="xxx"
                          target="yyy"
                          orderType="directOrder"/>
     <orderPrecedenceSpec origin="abc"
                          target="lmn"
                          orderType="directOrder"/>
  </processPrototypes>

В моем xslt строка / шаблон, который выполняет эту часть,

   <processPrototypes>

        <xsl:call-template name="help">
        </xsl:call-template>

    </processPrototypes>

    What to do in the next line here ? to modify the output created by the above template ?

Теперь мой вопрос, могу ли я быть в состоянииобработать вывод «processPrototypes», чтобы удалить дублирование?в том же файле xslt, только в следующей строке после вызова шаблона?

Чтобы после его повторной обработки мой окончательный вывод выглядел (без дублирования), как

     <processPrototypes>
         <orderPrecedenceSpec origin="xxx"
                              target="yyy"
                              orderType="directOrder"/>
         <orderPrecedenceSpec origin="abc"
                              target="lmn"
                              orderType="directOrder"/>
      </processPrototypes>

1 Ответ

1 голос
/ 12 апреля 2019

Если ваш XSLT-процессор поддерживает какой-либо вариант функции node-set() , вы можете сделать что-то вроде этого:

<xsl:variable name="prototypes">
  <processPrototypes>
    <xsl:call-template name="help" />
  </processPrototypes>
</xsl:variable>

<xsl:apply-templates select="exslt:node-set($prototypes)" />

Когда вы создаете переменную, которая содержит разметку или обработку XSLT, например apply-templates и т. Д., Как и переменная prototypes, приведенная выше, это создает фрагмент узла , к которому нельзя получить доступ так, как вы бы это сделали получить доступ к набору узлов. Функция node-set() преобразует этот фрагмент узла в набор узлов, чтобы вы могли выполнять на нем XSLT-обработку, проходить через XPath и т. Д. Я считаю, что эта функция доступна в нескольких основных процессорах XSLT.

...