2013-07-02 5 views
0

У меня есть XSL-файл, который был написан для использования с XSLT 2.0 Transformer, но теперь мне нужно изменить файл, чтобы он работал с XSLT 1.0. Я знаю, что for-each-group -команда - это функция XSLT 2.0, но как насчет других? Как я могу изменить свой файл, чтобы он работал с 1.0?XSLT 2.0 изменить на 1.0

Вот XSL-файла:

<xsl:template match="ROWSET"> 

    <ROWSET> 
     <xsl:for-each-group select="ROW" group-by="UKID"> 
      <UEBERKUNDE> 
       <NAME><xsl:value-of select="UEBERKUNDE" /></NAME> 
       <xsl:copy-of select="UKID" /> 
       <xsl:for-each-group select="current-group()" group-by="KUNDENNR"> 
        <KUNDE> 
         <xsl:copy-of select="KUNDENNR" /> 
         <xsl:copy-of select="KNAME1" /> 
         <xsl:copy-of select="KNAME2" /> 
         <xsl:copy-of select="KNAME3" /> 
         <xsl:copy-of select="LAND" /> 
         <xsl:copy-of select="PLZ" /> 
         <xsl:copy-of select="ORT" /> 
         <xsl:copy-of select="ADM" /> 
         <xsl:copy-of select="KUNDENKLASSE" /> 
         <xsl:copy-of select="MITARBEITER" /> 
         <xsl:copy-of select="BELEGART" /> 
         <EFAKTURA><xsl:value-of select="normalize-space(EFAKTURA)" /></EFAKTURA> 
         <WEBSTATUS><xsl:value-of select="normalize-space(WEBSTATUS)" /></WEBSTATUS> 
         <ZAHLUNGSBEDINGUNG><xsl:value-of select="normalize-space(ZAHLUNGSBEDINUNG)" /></ZAHLUNGSBEDINGUNG> 

         <xsl:for-each select="current-group()[count(. | key('rowsByMonth', concat(MONAT,'+',JAHR,'+',KUNDENNR))[1]) = 1]"> 
          <ROW> 
           <xsl:copy-of select="JAHR" /> 
           <xsl:copy-of select="MONAT" /> 
           <xsl:copy-of select="HANDLING" /> 
           <xsl:copy-of select="SOLLFRACHT" /> 
           <xsl:for-each select="key('rowsByMonth', concat(MONAT,'+',JAHR,'+',KUNDENNR))"> 
            <WARENGRUPPE> 
             <xsl:copy-of select="HGNAME" /> 
             <xsl:copy-of select="HGID" /> 
             <xsl:copy-of select="DG_BASIS" /> 
             <xsl:copy-of select="EKECHT" /> 
             <xsl:copy-of select="DB_BASIS" /> 
             <xsl:copy-of select="NETTO" /> 
            </WARENGRUPPE> 
           </xsl:for-each> 
          </ROW> 
         </xsl:for-each> 
        </KUNDE> 
       </xsl:for-each-group> 
      </UEBERKUNDE> 
     </xsl:for-each-group> 
    </ROWSET> 
</xsl:template></xsl:stylesheet> 

Заранее спасибо!

+0

Предоставленный вами фрагмент, похоже, не имеет каких-либо функций 2.0, кроме 'for-each-group' и его аналогов' current-group() '. – JLRishe

+0

Итак, как бы я изменил 'for-each-group', чтобы он работал? – gasparuff

+0

Использование ключа() в середине означает, что у вас есть гибрид методов XSLT 1.0 (метод сортировки Muenchian) и XSLT 2.0 (для каждой группы). Это делает преобразование не столь простым, поскольку неясно намерение ключа(). Когда мне нужно делать вложенную группировку, я использую метод группировки на основе переменных (метод группировки на основе переменных XSLT на основе Google: XSLT). –

ответ

0

Если вы хотите сделать группировку в XSLT 1.0, см. http://www.jenitennison.com/xslt/grouping/muenchian.xml для просто «group by» и http://www.biglist.com/lists/xsl-list/archives/200101/msg00070.html для вложенной группировки.

Так

<ROWSET> 
    <xsl:for-each-group select="ROW" group-by="UKID"> 
     <UEBERKUNDE> 
      <NAME><xsl:value-of select="UEBERKUNDE" /></NAME> 
      <xsl:copy-of select="UKID" /> 
      <xsl:for-each-group select="current-group()" group-by="KUNDENNR"> 

грубо перевести на две клавиши

<xsl:key name="by-ukid" match="ROW" use="UKID"/> 

<xsl:key name="by-nr" match="ROW" use="concat(UKID, '|', KUNDENNR)"/> 

и

<ROWSET> 
    <xsl:for-each select="ROW[generate-id() = generate-id(key('by-ukid',UKID)[1])]"> 
     <UEBERKUNDE> 
      <NAME><xsl:value-of select="UEBERKUNDE" /></NAME> 
      <xsl:copy-of select="UKID" /> 
      <xsl:for-each select="key('by-ukid', UKID)[generate-id() = generate-id(key('by-nr', concat(UKID, '|', KUNDENNR))[1])]"> 

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

+0

Спасибо, что помогли мне снова :-) – gasparuff

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