Заполнение данных вертикального столбца с помощью XSLT - PullRequest
0 голосов
/ 11 июля 2020

Я новичок в XSLT, а мой XML ниже

<Aus>
  <au>
     <ele>
        <auid>Au1</auid>
        <cid>C1</cid>
        <fn>F1</fn>
        <sn>S1</sn>
        <dept>D1</dept>
     </ele>
     
     <ele>
        <auid>Au2</auid>
        <cid>C2</cid>
        <fn>F2</fn>
        <sn>S2</sn>
        <dept>D2</dept>
     </ele>
     
     <ele>
        <auid>Au3</auid>
        <cid>C3</cid>
        <fn>F3</fn>
        <sn>S3</sn>
        <dept>D4</dept>
     </ele>..............
  </au>
</Aus>

Мне нужен результат, как показано ниже, в html представлении с использованием преобразования XSLT enter image description here

but XSLT code should be simple to identify next columns by position increment. Please help me.

My current code is

           ..........  

1 Ответ

2 голосов
/ 11 июля 2020

Я бы сделал это так:

  <xsl:template match="Aus/au">
      <table>
          <tbody>
              <xsl:apply-templates select="ele[1]/*" mode="row"/>
          </tbody>
      </table>
  </xsl:template>
  
  <xsl:template match="ele/*" mode="row">
      <tr>
          <xsl:variable name="pos" select="position()"/>
          <xsl:apply-templates select="../../ele/*[$pos]"/>
      </tr>
  </xsl:template>
  
  <xsl:template match="ele/*">
      <td>
          <xsl:value-of select="."/>
      </td>
  </xsl:template>

https://xsltfiddle.liberty-development.net/gVhEaiK

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

  <xsl:template match="authorDetails/authors">
      <table>
          <tbody>
              <xsl:apply-templates 
                select="element[1]/descendant::*[not(*)]" mode="row"/>
          </tbody>
      </table>
  </xsl:template>
  
  <xsl:template match="element//*" mode="row">
      <tr>
          <th>
              <xsl:value-of select="local-name()"/>
          </th>
          <xsl:variable name="pos" select="position()"/>
          <xsl:apply-templates select="ancestor::authors/element/descendant::*[not(*)][$pos]"/>
      </tr>
  </xsl:template>
  
  <xsl:template match="element//*">
      <td>
          <xsl:value-of select="."/>
      </td>
  </xsl:template>

Пример: https://xsltfiddle.liberty-development.net/gVhEaiK/5

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...