XSLT, получение значений не по порядку

#xml #xslt

#xml #xslt

Вопрос:

У меня есть такой XML

     <row>
        <col>1</col>
        <col>name1</col>
        <col>link1</col>
        <col>junk1</col>
        <col>value1</col>
    </row>
    <row>
       <col>2</col>
       <col>name2</col>
       <col>link2</col>
       <col>junk2</col>
       <col>value2</col>
    </row>
  

как мне написать XSLT, чтобы получить этот вывод? третий столбец в каждой строке содержит ссылку, а четвертое значение не нужно печатать в выходных данных

     <tr>
        <td>1<td>
        <td><a href="link1">name1</a></td>
        <td>value1<td>
    </tr>
    <tr>
        <td>2<td>
        <td><a href="link2">name2</a></td>
        <td>value<td>
    </tr>
  

Ответ №1:

Просмотр вашего XSLT поможет понять, почему вы получаете несортированный вывод. Но в любом случае попробуйте <xsl:sort select="col/text()"/> .

Ответ №2:

Следующий XSLT

 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="html" indent="yes"/>

   <xsl:template match="/table">
      <xsl:copy>
         <xsl:apply-templates select="row">
            <xsl:sort select="col[1]"/>
         </xsl:apply-templates>
      </xsl:copy>
   </xsl:template>

   <xsl:template match="row">
      <tr>
         <td>
            <xsl:value-of select="col[1]"/>
         </td>
         <td>
            <a href="{col[3]}">
               <xsl:value-of select="col[2]"/>
            </a>
         </td>
         <td>
            <xsl:value-of select="col[5]"/>
         </td>
      </tr>
   </xsl:template>
</xsl:stylesheet>
  

При применении к следующему входному XML

 <table>
    <row> 
        <col>1</col> 
        <col>name1</col> 
        <col>link1</col> 
        <col>junk1</col> 
        <col>value1</col> 
    </row> 
    <row> 
       <col>2</col> 
       <col>name2</col> 
       <col>link2</col> 
       <col>junk2</col> 
       <col>value2</col> 
    </row> 
</table>
  

выдаст следующий вывод

 <table>
   <tr>
      <td>1</td>
      <td>
         <a href="link1">name1</a>
      </td>
      <td>value1</td>
   </tr>
   <tr>
      <td>2</td>
      <td>
         <a href="link2">name2</a>
      </td>
      <td>value2</td>
   </tr>
</table>
  

Обратите внимание на использование шаблонов значений атрибутов (AVT) для установки атрибута href для тега a:

 <a href="{col[3]}">
  

Вы также можете отказаться от xsl:sort, если вы просто хотите, чтобы порядок строк в выходных данных совпадал с порядком во входном XML.