Hallo Roland,
Ich habe die XML und die XSL etwas angepasst. Leider spuckt es mir jetzt nicht mehr die Tabelle aus.
Mein neues Ziel ist es, statt mehrere PRODUCT_GROUPS, nur ein PRODUCT_GROUPS Element mit vielen untergeordneten PRODUCT_GROUP Elementen zu haben.
Die Tabelle soll dann anhand des Wertes der bei PRODUCT_GROUP hinterlegt ist (template="3") das jeweilige Tabellen-Template mit 3-, 4- oder 5-Spalten zuordnen. Zu dem könnte es gut sein das die Reihenfolge der PRODUCT GROUPS variiert, d.h. mal kommen 2x 3-Spaltige dann 5x 4-Spaltige, dann 1x 5-Spaltig, dann wieder 4x 3-Spaltige.
Ich habe bereits die XML angepasst und auch versucht 3 verschiedene Templates für die jeweiligen Spalten Anzahl anzulegen ( Tabelle-3,Tabelle-4,Tabelle-5), scheitere jedoch daran die Abfrage korrekt an die IF-Condition die dann das Template zuordnet zu übergeben.
Wenn ich bei "num-of-price-columns" folgende Codes Eintrage erhalte ich immer einen Fehler.
Ich vermute das ich einen Fehler bei der String to Number Konvertierung habe, komme aber nach ewigem Recherchieren auf kein Ergebnis, was mich langsam frustiert.
Code <xsl:variable name="num-of-price-columns" select="number(//PRODUCT_GROUP[@template])"/> Code <xsl:variable name="num-of-price-columns" select="number(//PRODUCT_GROUP[@template='3'])"/> Code <xsl:variable name="num-of-price-columns" select="//PRODUCT_GROUP[@template='3']"/> Code <xsl:variable name="num-of-price-columns" select='format-number(PRODUCT_GROUPS/@template, "#")' as="xs:string"/ Ursprünglich war es das hier: Das sah dann so aus -> https://ibb.co/q18BkB4
Code <xsl:variable name="num-of-price-columns" select="count(PRODUCT_GROUP)"/> Ich möchte lediglich abfragen ob der "template" Wert beispielsweise 3, 4 oder 5 hat wie oben beschrieben, und dieser Wert soll dann an die IF-Condition übergeben werden.
Habe ich vllt einen logischen Fehler in meiner XSL? Ich komme einfach nicht drauf.
Vielen Dank nochmal für die Hilfe, bin begeistert von diesem Forum wie schnell man hier Hilfe bzw. Lösungen erhält.
Hier ist die aktuelle XML Code <?xml version="1.0" encoding="UTF-8"?> <Root> <FIRMA> <SERIES_NAME> <PRODUKTNAME>Musterprodukt</PRODUKTNAME> </SERIES_NAME> <PRODUCT_GROUPS> <PRODUCT_GROUP template="3"> <TEMPLATE>3</TEMPLATE> <PRODUCT_GROUP_TITLE>Produktgruppe1</PRODUCT_GROUP_TITLE> <ITEM_PRICE> <PRICE_FIELD>11</PRICE_FIELD> <PRICE>250 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>12</PRICE_FIELD> <PRICE>300 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>13</PRICE_FIELD> <PRICE>350 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>21</PRICE_FIELD> <PRICE>350 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>34</PRICE_FIELD> <PRICE>350 €</PRICE> </ITEM_PRICE> </PRODUCT_GROUP> <PRODUCT_GROUP template="3"> <TEMPLATE>3</TEMPLATE> <PRODUCT_GROUP_TITLE>Produktgruppe2</PRODUCT_GROUP_TITLE> <ITEM_PRICE> <PRICE_FIELD>20</PRICE_FIELD> <PRICE>400 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>21</PRICE_FIELD> <PRICE>450 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>23</PRICE_FIELD> <PRICE>500 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>53</PRICE_FIELD> <PRICE>500 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>64</PRICE_FIELD> <PRICE>500 €</PRICE> </ITEM_PRICE> </PRODUCT_GROUP> <PRODUCT_GROUP template="3"> <TEMPLATE>3</TEMPLATE> <PRODUCT_GROUP_TITLE>Produktgruppe3</PRODUCT_GROUP_TITLE> <ITEM_PRICE> <PRICE_FIELD>34</PRICE_FIELD> <PRICE>550 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>35</PRICE_FIELD> <PRICE>600 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>36</PRICE_FIELD> <PRICE>650 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>47</PRICE_FIELD> <PRICE>650 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>48</PRICE_FIELD> <PRICE>650 €</PRICE> </ITEM_PRICE> </PRODUCT_GROUP> <PRODUCT_GROUP template="4"> <PRODUCT_GROUP_TITLE>Produktgruppe1</PRODUCT_GROUP_TITLE> <ITEM_PRICE> <PRICE_FIELD>20</PRICE_FIELD> <PRICE>250 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>21</PRICE_FIELD> <PRICE>300 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>22</PRICE_FIELD> <PRICE>350 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>23</PRICE_FIELD> <PRICE>350 €</PRICE> </ITEM_PRICE> </PRODUCT_GROUP> <PRODUCT_GROUP template="4"> <PRODUCT_GROUP_TITLE>Produktgruppe2</PRODUCT_GROUP_TITLE> <ITEM_PRICE> <PRICE_FIELD>34</PRICE_FIELD> <PRICE>400 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>35</PRICE_FIELD> <PRICE>450 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>36</PRICE_FIELD> <PRICE>500 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>37</PRICE_FIELD> <PRICE>500 €</PRICE> </ITEM_PRICE> </PRODUCT_GROUP> <PRODUCT_GROUP template="4"> <PRODUCT_GROUP_TITLE>Produktgruppe3</PRODUCT_GROUP_TITLE> <ITEM_PRICE> <PRICE_FIELD>42</PRICE_FIELD> <PRICE>550 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>43</PRICE_FIELD> <PRICE>600 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>44</PRICE_FIELD> <PRICE>650 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>45</PRICE_FIELD> <PRICE>650 €</PRICE> </ITEM_PRICE> </PRODUCT_GROUP> <PRODUCT_GROUP template="4"> <PRODUCT_GROUP_TITLE>Produktgruppe4</PRODUCT_GROUP_TITLE> <ITEM_PRICE> <PRICE_FIELD>51</PRICE_FIELD> <PRICE>700 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>52</PRICE_FIELD> <PRICE>750 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>53</PRICE_FIELD> <PRICE>800 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>54</PRICE_FIELD> <PRICE>800 €</PRICE> </ITEM_PRICE> </PRODUCT_GROUP> <PRODUCT_GROUP template="5"> <PRODUCT_GROUP_TITLE>Produktgruppe1</PRODUCT_GROUP_TITLE> <ITEM_PRICE> <PRICE_FIELD>20</PRICE_FIELD> <PRICE>250 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>21</PRICE_FIELD> <PRICE>300 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>22</PRICE_FIELD> <PRICE>350 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>23</PRICE_FIELD> <PRICE>350 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>24</PRICE_FIELD> <PRICE>400 €</PRICE> </ITEM_PRICE> </PRODUCT_GROUP> <PRODUCT_GROUP template="5"> <PRODUCT_GROUP_TITLE>Produktgruppe2</PRODUCT_GROUP_TITLE> <ITEM_PRICE> <PRICE_FIELD>34</PRICE_FIELD> <PRICE>450 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>35</PRICE_FIELD> <PRICE>500 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>36</PRICE_FIELD> <PRICE>550 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>37</PRICE_FIELD> <PRICE>600 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>38</PRICE_FIELD> <PRICE>650 €</PRICE> </ITEM_PRICE> </PRODUCT_GROUP> <PRODUCT_GROUP template="5"> <PRODUCT_GROUP_TITLE>Produktgruppe3</PRODUCT_GROUP_TITLE> <ITEM_PRICE> <PRICE_FIELD>42</PRICE_FIELD> <PRICE>700 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>43</PRICE_FIELD> <PRICE>800 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>44</PRICE_FIELD> <PRICE>900 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>45</PRICE_FIELD> <PRICE>1000 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>46</PRICE_FIELD> <PRICE>1100 €</PRICE> </ITEM_PRICE> </PRODUCT_GROUP> <PRODUCT_GROUP template="5"> <PRODUCT_GROUP_TITLE>Produktgruppe4</PRODUCT_GROUP_TITLE> <ITEM_PRICE> <PRICE_FIELD>51</PRICE_FIELD> <PRICE>700 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>52</PRICE_FIELD> <PRICE>750 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>53</PRICE_FIELD> <PRICE>800 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>54</PRICE_FIELD> <PRICE>1050 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>55</PRICE_FIELD> <PRICE>1200 €</PRICE> </ITEM_PRICE> </PRODUCT_GROUP> <PRODUCT_GROUP template="5"> <PRODUCT_GROUP_TITLE>Produktgruppe5</PRODUCT_GROUP_TITLE> <ITEM_PRICE> <PRICE_FIELD>51</PRICE_FIELD> <PRICE>700 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>52</PRICE_FIELD> <PRICE>750 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>53</PRICE_FIELD> <PRICE>800 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>54</PRICE_FIELD> <PRICE>1050 €</PRICE> </ITEM_PRICE> <ITEM_PRICE> <PRICE_FIELD>55</PRICE_FIELD> <PRICE>1200 €</PRICE> </ITEM_PRICE> </PRODUCT_GROUP> </PRODUCT_GROUPS> </FIRMA> </Root> Hier ist die neue XSL Code <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/" xmlns:aid5="http://ns.adobe.com/AdobeInDesign/5.0/" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"></xsl:output> <xsl:attribute-set name="mytablestyle"> <xsl:attribute name="aid5:tablestyle">Tabelle_RB</xsl:attribute> <xsl:attribute name="aid:table">table</xsl:attribute> <xsl:attribute name="aid:trows"><xsl:value-of select="count(ITEM_PRICE)+1"/></xsl:attribute> <xsl:attribute name="aid:tcols"><xsl:value-of select="count(ITEM_PRICE[1]/*)+1"/></xsl:attribute> </xsl:attribute-set> <xsl:template match="/"> <FIRMA> <xsl:apply-templates select="Root/FIRMA/SERIES_NAME"/> <PRODUCT_GROUPS> <xsl:apply-templates select="Root/FIRMA/PRODUCT_GROUPS"/> </PRODUCT_GROUPS> </FIRMA> </xsl:template> <xsl:template match="SERIES_NAME"> <SERIE> <PRODUKTNAME aid:pstyle="Produktname" > <xsl:value-of select="PRODUKTNAME"/> <xsl:text>
</xsl:text> <xsl:text>
</xsl:text> </PRODUKTNAME> <PRODUKTBESCHREIBUNG aid:pstyle="Produktbeschreibung" > <xsl:value-of select="PRODUKTBESCHREIBUNG"/> <xsl:text>
</xsl:text> <xsl:text>
</xsl:text> </PRODUKTBESCHREIBUNG> </SERIE> </xsl:template> <xsl:template match="PRODUCT_GROUPS"> <xsl:variable name="template-size-3" select="//PRODUCT_GROUP[@template='3']"/> <xsl:variable name="template-size-4" select="//PRODUCT_GROUP[@template='4']"/> <xsl:variable name="template-size-5" select="//PRODUCT_GROUP[@template='5']"/> <xsl:if test="$template-size-3 = 3"> <xsl:value-of select="$template-size-3"/> </xsl:if> <xsl:if test="$template-size-4 = 4"> <xsl:value-of select="$template-size-4"/> </xsl:if> <xsl:if test="$template-size-5 = 5"> <xsl:value-of select="$template-size-3"/> </xsl:if> <!-- <xsl:variable name="num-of-price-columns" select="number(//PRODUCT_GROUP[@template])"/> --> <!-- <xsl:variable name="num-of-price-columns" select="count(PRODUCT_GROUP)"/> --> <xsl:variable name="num-of-price-columns" select='format-number(PRODUCT_GROUPS/@template, "#")' as="xs:string"/> <xsl:variable name="trows-attribute-value" select="count(PRODUCT_GROUP[1]/ITEM_PRICE) + 1"/> <xsl:variable name="tcols-attribute-value" select="$num-of-price-columns + 1"/> <PRODUKTGRUPPE> <PRODUCT_GROUP_TITLE aid:pstyle="ZusatzProduktTitel" > <xsl:value-of select="PRODUCT_GROUP_TITLE"/> <xsl:text>
</xsl:text> <xsl:text>
</xsl:text> </PRODUCT_GROUP_TITLE> <PRICES> <xsl:element aid:pstyle="ZusatzProduktPreis" name="Tabelle"> <table xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/" xmlns:aid5="http://ns.adobe.com/AdobeInDesign/5.0/" xmlns:rd="http://www.rolanddreger.net" aid:table="table" aid:trows="{$trows-attribute-value}" aid:tcols="{$tcols-attribute-value}" > <cell aid:table="cell" aid:theader="" aid:crows="1" aid:ccols="1">Preisfeld</cell> <cell aid:table="cell" aid:theader="" aid:crows="1" aid:ccols="1"><xsl:value-of select="PRODUCT_GROUP[1]/PRODUCT_GROUP_TITLE"/></cell> <cell aid:table="cell" aid:theader="" aid:crows="1" aid:ccols="1"><xsl:value-of select="PRODUCT_GROUP[2]/PRODUCT_GROUP_TITLE"/></cell> <cell aid:table="cell" aid:theader="" aid:crows="1" aid:ccols="1"><xsl:value-of select="PRODUCT_GROUP[3]/PRODUCT_GROUP_TITLE"/></cell> <xsl:if test="$num-of-price-columns = 4"> <cell aid:table="cell" aid:theader="" aid:crows="1" aid:ccols="1"><xsl:value-of select="PRODUCT_GROUP[4]/PRODUCT_GROUP_TITLE"/></cell> </xsl:if> <xsl:if test="$num-of-price-columns = 5"> <cell aid:table="cell" aid:theader="" aid:crows="1" aid:ccols="1"><xsl:value-of select="PRODUCT_GROUP[4]/PRODUCT_GROUP_TITLE"/></cell> <cell aid:table="cell" aid:theader="" aid:crows="1" aid:ccols="1"><xsl:value-of select="PRODUCT_GROUP[5]/PRODUCT_GROUP_TITLE"/></cell> </xsl:if> <xsl:for-each select="PRODUCT_GROUP/ITEM_PRICE"> <xsl:sort select="count(preceding-sibling::ITEM_PRICE)" data-type="number"/> <xsl:if test="(position() - 1 + $num-of-price-columns) mod $num-of-price-columns = 0"> <cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth=""> <xsl:value-of select="PRICE_FIELD"/> </cell> </xsl:if> <cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth=""> <xsl:apply-templates select="PRICE"/> </cell> </xsl:for-each> </table> </xsl:element> <xsl:text>
</xsl:text> </PRICES> </PRODUKTGRUPPE> </xsl:template> <xsl:template match="PRICE"> <xsl:value-of select="."/> </xsl:template> </xsl:stylesheet>