J'ai un certain nombre de fichiers xml à partir desquels j'essaie de créer une table WordML. Il y a un certain nombre de nœuds dans chaque nodelist, et j'ai besoin de créer une colonne pour chacun d'entre eux, jusqu'à un maximum de 15 colonnes. Cependant, s'il y en a moins de 15, les colonnes doivent être justifiées.Table XSLT WordML avec colonnes dynamiques basées sur le nombre de nœuds
modèle appelé NodeList:
<xsl:template match="NodeList">
<xsl:for-each select="NodeRef">
<xsl:sort data-type="number" select="@Position" order="ascending"/>
<xsl:sort data-type="text" select="@Name" order="ascending"/>
<xsl:variable name="documentName" select="concat(@Id, '_Nodes.xml')"/>
<xsl:apply-templates mode="SimpleNode" select="document($documentName)/Node"/>
</xsl:for-each>
</xsl:template>
modèle appelé simpleNode:
<xsl:template mode="SimpleNode" match="Node">
<!-- Output the Node Table - as template within for-each,
will output table many times -->
<xsl:call-template name="SimpleNodeTable"/>
</xsl:template>
modèle SimpleNodeTable (où je suis bloqué):
<xsl:template name="SimpleNodeTable">
<w:tbl>
<w:tblPr>
<w:tblStyle w:val="ReportTable1"/>
<w:tblW w:type="dxa">
<xsl:attribute name="w:w">
<xsl:value-of select="$landscapeBodyWidth"/>
</xsl:attribute>
</w:tblW>
<w:tblLayout w:type="Fixed"/>
</w:tblPr>
<w:tblGrid>
<w:gridCol>
<xsl:attribute name="w:w">
<xsl:value-of select="$nodeNameWidth"/>
</xsl:attribute>
</w:gridCol>
<w:gridCol>
<xsl:attribute name="w:w">
<xsl:value-of select="$landscapeBodyWidth - $nodeNameWidth"/>
</xsl:attribute>
</w:gridCol>
</w:tblGrid>
<w:tr>
<!-- first row -->
<w:tc>
<!-- First cell is blank so vertically merge -->
<w:vmerge w:val="restart"/>
<w:p/>
</w:tc>
<!-- HOW TO DO A FOR EACH LOOP TO ADD 1 COLUMN PER NODEREF?? -->
<xsl:for-each select="Node">
<w:tc>
<w:p>
<!-- Second cell contains the name of the node (from xml file) -->
<w:t>
<xsl:value-of select="NodeName"/>
</w:t>
</w:p>
</w:tc>
</xsl:for-each>
</w:tr>
</w:tbl>
</xsl:template>
Peut-être que je suis dans cette approche un moyen complètement faux, mais j'ai fini par me confondre avec essayer d'obtenir 1 table et puis de commencer la boucle pour chaque. Je serais reconnaissant pour tout conseil/orientation.
Votre structure w: tblGrid ne doit-elle pas contenir autant d'éléments w: gridCol que le nombre maximal de nœuds nodaux dans les fichiers XML source? – collapsar
Je ne suis pas sûr de comprendre ... votre problème est que vous voulez transposer la table, non? Si oui, jetez un coup d'oeil à ceci: http://stackoverflow.com/questions/1171376/matrix-transposition-in-xslt – Efrain