A więc robie arkusz XSLT, który przekształca XML-a wygenorwanego przez ADO Recordset metodą save.
I pojawia mi się problem, mianowicie zakladamy że mam pola o nazwach p1, p2, p3.
W strukturze dokumentu mam opisane pola więc wiem ile ich powinno wystapić, każdy rekord jest zapisany tak:

  1. <z:row p1='frfrf' p2='frfrf' p3='frfrf'/>


wiec w arkuszu robie po nich pętle:
  1. <xsl:template match="/xml/rs:data/z:row" mode="det">
  2.            <tr>
  3.                  <xsl:for-each select="@*">
  4.                            <td><xsl:value-of select='.'/></td>
  5.                  </xsl:for-each>
  6.            </tr>
  7.      </xsl:template>


Która z każdego węzła robi wiersz w tabeli.
Problem polega na tym że gdy jakieś pole jest puste to brak atrybutu, wiec może być np. tak

  1. <z:row p1='frfrf' p2='frfrf' p3='frfrf'/>
  2. <z:row p1='frfrf' p3='frfrf'/>


Wiec powyższa pętla zadziala ale przy generowaniu tabeli zostanie pominięta 2 kolumna...

Potrafie zrobic petle po nazwach kolumn:

  1. <xsl:for-each select="/xml/s:Schema/s:ElementType[@name='row']/s:AttributeType">
  2.    <xsl:value-of select='@name'/>
  3. </xsl:for-each>


Jednak nie wiem jak dalej, a więc na necie znalazłem przykład który robi powyższą pętle i później wyciaga dane z wiersza:

  1. <xsl:value-of select="context(-2)/@*[nodeName()=context(-1)/@name]" />


ale to wymaga zadeklarowania w przestrzeni nazw:

  1. xmlns:xsl="http://www.w3.org/TR/WD-xsl"

A to z kolei uniemozliwi mi użycie funkcji document(), na co nie moge sobie pozwolić, więc nie wiem jak to obejść...
Może ktoś ma pomysł?