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:
<z:row p1='frfrf' p2='frfrf' p3='frfrf'/>
wiec w arkuszu robie po nich pętle:
<xsl:template match="/xml/rs:data/z:row" mode="det"> <tr> <xsl:for-each select="@*"> <td><xsl:value-of select='.'/></td> </xsl:for-each> </tr> </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
<z:row p1='frfrf' p2='frfrf' p3='frfrf'/> <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:
<xsl:for-each select="/xml/s:Schema/s:ElementType[@name='row']/s:AttributeType"> <xsl:value-of select='@name'/> </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:
<xsl:value-of select="context(-2)/@*[nodeName()=context(-1)/@name]" />
ale to wymaga zadeklarowania w przestrzeni nazw:
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ł?