[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Automatisierte Tabellen mit XML erstellen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Automatisierte Tabellen mit XML erstellen

msassanelli
Beiträge gesamt: 12

18. Okt 2021, 14:12
Beitrag # 1 von 17
Bewertung:
(17593 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo liebe Community,

ich versuche aktuell ein Skript zu bauen, dass XML Daten ausließt -> und dann zuordnet mittels eines Wertes in der XML welches Layout Template gezogen werden soll:

In XML steht SpaltenAnzahlTabelle="3" also soll das Indesign Layout mit der 3-Spaltigen Tabelle verwendet werden.

Noch besser wäre natürlich das Tabellen automatisch generiert werden ohne die Zuweisung eines Templates.
Also sprich das in der XML geprüft wird wie viele Unterelemente ein Element hat (Bsp. Element>Unterelement1,Unterelement2,Unterelement3) in diesem Fall müsste eine 3-Spaltige Tabelle angelegt werden und diese dann mit den Daten der XML gefüllt werden.

Ich hab zwar bereits ein Tutorial gefunden das die Ansätze für solch ein Skript mitbringt, jedoch wird die Spaltenbreite händisch gesetzt statt das die restliche Spaltenbreite automatisch mit der übrigen Platz verwendet wird.

Tutorial 1 bis 3:
(1)
https://www.psd-tutorials.de/...-is-the-key-?done=10

(2)
https://www.psd-tutorials.de/...-is-the-key-?done=10

(3)
https://www.psd-tutorials.de/...g-is-the-key?done=10


Gibt es hier jemanden der sowas bereits programmiert hat oder Ansätze dafür mitbringt?

Ich würde mich über jeden Ratschlag oder Hilfe hierzu sehr freuen.

Vielen Dank schonmal an die Community.
X

Automatisierte Tabellen mit XML erstellen

drerol74
Beiträge gesamt: 507

18. Okt 2021, 23:13
Beitrag # 2 von 17
Beitrag ID: #581468
Bewertung:
(17547 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

so ganz ist mir dein Vorhaben noch nicht klar.

Kommt denn deine XML-Tabelle schon als InDesign-Tabelle im Dokument an und es scheitert an der Zuweisung der Spaltenbreite? Oder funktioniert die Transformation der XML-Struktur nicht richtig?

Hilfreich wäre ein Bespieldokument mit dem man nachvollziehen kann, wo du jetzt stehst und wo du genau hinwillst.

Schöne Grüße
Roland


als Antwort auf: [#581457]

Automatisierte Tabellen mit XML erstellen

msassanelli
Beiträge gesamt: 12

19. Okt 2021, 16:14
Beitrag # 3 von 17
Beitrag ID: #581479
Bewertung:
(17479 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
So das sind die Muster Templates

Template 1 mit 4 Spalten -> https://ibb.co/PT06yN2
Template 1 mit 3 Spalten -> https://ibb.co/M8ZpyLJ

Es geht darum das die Tabellen immer die Volle Breite des Dokumentes einnehmen wie im Bild zu sehen.

Dazu soll wenn möglich Anhand eines Wertes in der XML oder per JS abgefragt werden

ob das Item der XML "ITEM_PRICE" 3 oder 4 mal innerhalb von "PRODUCT_GROUP" exisitiert und anhand dessen dann das template A mit 4 oder Tempalte B mit 3 Spalten zuweist.

Ich hoffe das es nun verständlicher ist.

Anbei mein bisheriger Code.
Ich habe bisher Probleme dabei die Tabelle zu generieren. Die Daten kommen rein aus der XML und sollen mittels der XSL Formatiert werden.

Vielen Dank vorab nochmal :)

Das hier ist meine XML
Code
<?xml version="1.0" encoding="UTF-8"?> 
<Root>
<FIRMA>
<SERIES_NAME>
<PRODUKTNAME>Musterprodukt</PRODUKTNAME>
<PRODUKTBESCHREIBUNG>Lorem ipsum dolor sit amet consectetur adipisicing elit. Quod illo soluta vitae, perferendis doloremque voluptatem recusandae neque, facilis ut atque eos fuga excepturi sed est. Ipsa consequatur eius id eveniet accusamus accusantium, expedita aspernatur rem, quisquam quia atque sunt ad alias consectetur eum error modi, iure incidunt hic laudantium nemo culpa nam? Quia aliquam illum praesentium perferendis, alias blanditiis eveniet porro, maiores placeat, iure laudantium. Esse suscipit voluptates perspiciatis, doloribus sapiente maiores, debitis eius et incidunt unde quaerat aliquid cumque?</PRODUKTBESCHREIBUNG>
</SERIES_NAME>

<PRODUCT_GROUPS>
<PRODUCT_GROUP>
<PRODUCT_GROUP_TITLE>Produktgruppe1</PRODUCT_GROUP_TITLE>
<ITEM_PRICE preis="250">
<PRICE_FIELD>1</PRICE_FIELD>
<PRICE>250</PRICE>
</ITEM_PRICE>
<ITEM_PRICE preis="300">
<PRICE_FIELD>2</PRICE_FIELD>
<PRICE>300</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>3</PRICE_FIELD>
<PRICE>350</PRICE>
</ITEM_PRICE>
</PRODUCT_GROUP>

<PRODUCT_GROUP>
<PRODUCT_GROUP_TITLE>Produktgruppe2</PRODUCT_GROUP_TITLE>
<ITEM_PRICE preis="400">
<PRICE_FIELD>3</PRICE_FIELD>
<PRICE>400</PRICE>
</ITEM_PRICE>
<ITEM_PRICE preis="450">
<PRICE_FIELD>4</PRICE_FIELD>
<PRICE>450</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>5</PRICE_FIELD>
<PRICE>500</PRICE>
</ITEM_PRICE>
</PRODUCT_GROUP>
</PRODUCT_GROUPS>

</FIRMA>
</Root>



[b]Das hier ist meine XSLT
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: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:attribute-set name="mytablestyle_h1">
<xsl:attribute name="aid5:tablestyle">Tabelle_h1</xsl:attribute>
<xsl:attribute name="aid:table">table</xsl:attribute>
<xsl:attribute name="aid:trows"><xsl:value-of select="1"/></xsl:attribute>
<xsl:attribute name="aid:tcols"><xsl:value-of select="1"/></xsl:attribute>
</xsl:attribute-set>

<xsl:template match="FIRMA">
<FIRMA>
<xsl:apply-templates select="SERIES_NAME" match="SERIES_NAME"/>
<PRODUCT_GROUPS>
<xsl:apply-templates select="PRODUCT_GROUPS" match="PRODUCT_GROUPS"/>
</PRODUCT_GROUPS>
</FIRMA>
</xsl:template>


<xsl:template match="SERIES_NAME">
<SERIE>
<PRODUKTNAME aid:pstyle="Produktname" >
<xsl:value-of select="PRODUKTNAME"/>
<xsl:text>&#xA;</xsl:text>
<xsl:text>&#xA;</xsl:text>
</PRODUKTNAME>
<PRODUKTBESCHREIBUNG aid:pstyle="Produktbeschreibung" >
<xsl:value-of select="PRODUKTBESCHREIBUNG"/>
<xsl:text>&#xA;</xsl:text>
<xsl:text>&#xA;</xsl:text>
</PRODUKTBESCHREIBUNG>
</SERIE>
</xsl:template>

<xsl:template match="PRODUCT_GROUPS">

<xsl:for-each select="PRODUCT_GROUP">
<PRODUKTGRUPPE>
<PRODUCT_GROUP_TITLE aid:pstyle="ZusatzProduktTitel" >
<xsl:value-of select="PRODUCT_GROUP_TITLE"/>
<xsl:text>&#xA;</xsl:text>
<xsl:text>&#xA;</xsl:text>
</PRODUCT_GROUP_TITLE>

<PRICES>
<xsl:element aid:pstyle="ZusatzProduktPreis" name="Tabelle" use-attribute-sets="mytablestyle">
<!-- <xsl:call-template name="table_th_not_def">
<xsl:with-param name="i" select="1" />
<xsl:with-param name="u" select="1" />
<xsl:with-param name="breite_spalte" select="1" />
<xsl:with-param name="breite_spalte_art" select="1" />
<xsl:with-param name="breite_spalte_gesamt" select="150" />
</xsl:call-template> -->
<xsl:for-each select="PRODUCT_GROUP">
<xsl:call-template name="table_inhalt"></xsl:call-template>
<cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="">
<xsl:value-of select="@preis" />
</cell>
</xsl:for-each>
</xsl:element>
<xsl:text>&#xA;</xsl:text>
</PRICES>
</PRODUKTGRUPPE>

</xsl:for-each>

</xsl:template>


<xsl:template name="table_th_not_def">
<xsl:param name="i"/>
<xsl:param name="u"/>
<xsl:param name="breite_spalte"/>
<xsl:param name="breite_spalte_art"/>
<xsl:param name="breite_spalte_gesamt"/>

<xsl:choose>

<xsl:when test="$u &lt;= count(ITEM_PRICE[1]/*)">
<xsl:call-template name="rufe_spalteab">
<xsl:with-param name="i" select="$i" />
<xsl:with-param name="u" select="$u" />
<xsl:with-param name="zeichen_anz" select="8" />
<xsl:with-param name="breite_spalte_gesamt" select="$breite_spalte_gesamt" />
</xsl:call-template>
</xsl:when>

<xsl:otherwise>

<cell aid:table="cell" aid:theader="" aid:crows="1" aid:ccols="1" aid:ccolwidth="{$breite_spalte_gesamt}">
<xsl:value-of select="(ITEM_PRICE)"/>
</cell>

</xsl:otherwise>
</xsl:choose>
</xsl:template>


<xsl:template name="rufe_spalteab">
<xsl:param name="i"/>
<xsl:param name="u"/>
<xsl:param name="zeichen_anz" select="8" />
<xsl:param name="breite_spalte_gesamt"/>

<xsl:choose>
<xsl:when test="$i &lt;= count(ITEM_PRICE)">
<xsl:variable name="stringzahl" select="string-length(ITEM_PRICE[$i]/*[$u])" />
<xsl:if test="$stringzahl &gt; $zeichen_anz">
<xsl:call-template name="rufe_spalteab">
<xsl:with-param name="i" select="$i+1" />
<xsl:with-param name="u" select="$u" />
<xsl:with-param name="zeichen_anz" select="$stringzahl" />
<xsl:with-param name="breite_spalte_gesamt" select="$breite_spalte_gesamt" />
</xsl:call-template>
</xsl:if>

<xsl:if test="$stringzahl &lt;= $zeichen_anz">
<xsl:call-template name="rufe_spalteab">
<xsl:with-param name="i" select="$i+1"/>
<xsl:with-param name="u" select="$u"/>
<xsl:with-param name="zeichen_anz" select="$zeichen_anz" />
<xsl:with-param name="breite_spalte_gesamt" select="$breite_spalte_gesamt" />
</xsl:call-template>
</xsl:if>
</xsl:when>

<xsl:otherwise>
<cell aid:table="cell" aid:theader="" aid:crows="1" aid:ccols="1" aid:ccolwidth="{$zeichen_anz * 7}">
<xsl:value-of select="name(ITEM_PRICE[1]/*[$u])" />
</cell>

<xsl:call-template name="table_th_not_def">
<xsl:with-param name="i" select="1" />
<xsl:with-param name="u" select="$u+1"/>
<xsl:with-param name="breite_spalte_gesamt" select="$breite_spalte_gesamt - $zeichen_anz * 7" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

<xsl:template name="table_inhalt">
<xsl:for-each select="(*)">
<cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="">
<xsl:value-of select="ITEM_PRICE"/>
</cell>
</xsl:for-each>
</xsl:template>


</xsl:stylesheet>




[b]Das hier ist meine JS
Code
var myDocument = app.documents.item(0); 
var sitenumber = 0;

var inhalt= myDocument.xmlElements.item(0).xmlElements.item(0);

set_textfeld(inhalt);

function set_textfeld(inhalt){
var myPage = myDocument.pages.item(sitenumber);
var myTextFrame = myPage.textFrames.add();
myTextFrame.sendToBack();

inhalt.placeXML(myTextFrame);

myTextFrame.geometricBounds = myGetBounds();
return
}

function myGetBounds( ){
myPage = myDocument.pages.item(sitenumber);
if(myPage.side == PageSideOptions.rightHand ){
var myX1 = 12.7; var myX2 = 197.3;
} else {
var myX1 = 70; var myX2 = 193;
}

var myY1 = 12.7;
var myY2 = myY1+250;
return [myY1, myX1, myY2, myX2];
}



als Antwort auf: [#581468]

Automatisierte Tabellen mit XML erstellen

drerol74
Beiträge gesamt: 507

20. Okt 2021, 09:46
Beitrag # 4 von 17
Beitrag ID: #581485
Bewertung:
(17376 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ich hab dir ein Beispiel einer Transformation angehängt. Sehe ich das richtig, dass in den XML-Daten noch 1 bzw. 2 PRODUCT_GROUP-Elemente gefehlt haben? Diese sind in den XML-Dateien im Anhang ergänzt.

Die Unterscheidung ob 3 oder 4 Preis-Spalten erfolgt über die Anzahl der PRODUCT_GROUP-Elemente:

Code
<xsl:variable name="num-of-price-columns" select="count(PRODUCT_GROUP)"/> 



Um die korrekte Reihenfolge in der InDesign-Tabelle zu bekommen, werden die ITEM_PRICE-Elemente anhand der Anzahl ihrer vorangehenden Geschwister sortiert:

Code
<xsl:sort select="count(preceding-sibling::ITEM_PRICE)" data-type="number"/> 



Mit dem Attribut aid:ccolwidth kannst du die Breite (in Punkt) an die Zelle (z.B. im Tabellenkopf) mitgeben. Ich würde das aber mit JavaScript dann im InDesign-Dokument machen. Damit bist du flexibler, denke ich.

Alle XML-Elemente mit Tabellen ermitteln:

Code
XMLElement.evaluateXPathExpression("//table") 


Dann in diesen die Tabelle:

Code
XMLElement.tables[0] 


Und anhand der Breite des Textrahmens, in dem sie sich die Tabelle befindet, die Spaltenpreite berechnen.

Schöne Grüße
Roland


als Antwort auf: [#581479]
Anhang:
id_tabelle_sort.xsl (5.22 KB)   tabelle_3_preisspalten.xml (2.73 KB)   tabelle_4_preisspalten.xml (3.34 KB)

Automatisierte Tabellen mit XML erstellen

msassanelli
Beiträge gesamt: 12

20. Okt 2021, 10:11
Beitrag # 5 von 17
Beitrag ID: #581487
Bewertung:
(17361 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Wow vielen Dank, das hilft mir wirklich schon viel weiter.

Nur verstehe ich nicht genau, wie ich die Code Snippets in meine JSX einbette. Mein JS-Verständnis hält sich bisher noch in Grenzen. Meine bisherigen Versuche, habe nur Fehler verursacht.

Ist es auch möglich, mehrere PRODUCT_GROUPS zu haben und anhand der ANZAHL der PRODUCT_GROUP die Tabelle mit 3 oder 4 Spalten zu ziehen?

Habe noch nicht ganz verstanden wie das Funktioniert.


Vielen vielen Dank für die Hilfe.


als Antwort auf: [#581485]

Automatisierte Tabellen mit XML erstellen

drerol74
Beiträge gesamt: 507

20. Okt 2021, 12:20
Beitrag # 6 von 17
Beitrag ID: #581493
Bewertung:
(17321 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Ist es auch möglich, mehrere PRODUCT_GROUPS zu haben und anhand der ANZAHL der PRODUCT_GROUP die Tabelle mit 3 oder 4 Spalten zu ziehen?


Prinzipiell ja, kommt darauf an, wie die Inhalte dann im InDesign-Dokument landen sollen, momentan wird dafür eine eigene Tabelle erstellt.


Antwort auf: Nur verstehe ich nicht genau, wie ich die Code Snippets in meine JSX einbette.


Das kommt jetzt darauf an, wie dein InDesign-Dokument genau aufgebaut ist.


Antwort auf: Mein JS-Verständnis hält sich bisher noch in Grenzen. Meine bisherigen Versuche, habe nur Fehler verursacht.


Dann würde ich das aber eher auch im Zuge der Transformation der XML-Daten erledigen. Vorher in InDesign die Spaltenbreiten der Tabellenspalten für 3 bzw. 4 Preisspalten ermitteln (in Punkt) und dann mit dem Attribut aid:ccolwidth übergeben.

Schöne Grüße
Roland


als Antwort auf: [#581487]

Automatisierte Tabellen mit XML erstellen

msassanelli
Beiträge gesamt: 12

20. Okt 2021, 15:46
Beitrag # 7 von 17
Beitrag ID: #581497
Bewertung:
(17281 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
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>&#xA;</xsl:text>
<xsl:text>&#xA;</xsl:text>
</PRODUKTNAME>
<PRODUKTBESCHREIBUNG aid:pstyle="Produktbeschreibung" >
<xsl:value-of select="PRODUKTBESCHREIBUNG"/>
<xsl:text>&#xA;</xsl:text>
<xsl:text>&#xA;</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>&#xA;</xsl:text>
<xsl:text>&#xA;</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>&#xA;</xsl:text>
</PRICES>
</PRODUKTGRUPPE>

</xsl:template>

<xsl:template match="PRICE">
<xsl:value-of select="."/>
</xsl:template>

</xsl:stylesheet>



als Antwort auf: [#581479]

Automatisierte Tabellen mit XML erstellen

drerol74
Beiträge gesamt: 507

21. Okt 2021, 00:21
Beitrag # 8 von 17
Beitrag ID: #581500
Bewertung:
(17217 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Wenn du die Elemente zählen willst, verwende count() nicht number().

Mach dir nochmal Gedanken, wie du deine XML-Daten aufbaust. Offenbar hast du darauf Einfluss? Momentan wirkt das auf mich eher erratisch. Und wie du die 3-, 4- oder 5-spaltigen Tabellen dann in Indesign zusammenfügen möchtest.

Aber prinzipiell kannst du schon mit einem Prädikat im xPath-Ausdruck, wie beispielsweise PRODUCT_GROUP[@template='3'], die unterschiedlichen PRODUCT_GROUP-Elemente mit ihren Kindelementen zusammenfassen und dann über getrennte Templates in der Transformation verarbeiten.

Schöne Grüße
Roland


als Antwort auf: [#581497]

Automatisierte Tabellen mit XML erstellen

msassanelli
Beiträge gesamt: 12

21. Okt 2021, 13:38
Beitrag # 9 von 17
Beitrag ID: #581504
Bewertung:
(17117 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

also ich bin mittlerweile recht weit gekommen, habe verstanden wie ich die Breite der jeweiligen spalten auf die Gesamtbreite berechne.

Auch das er sich das jeweilige template zieht.

Das einzige das jetzt noch nicht klappt ist sozusagen die Schleife. Sobald ich Beispielsweise eine zusätzliche Produktgruppe anlege mit 3-Spalten kommt immer ein Fehler das das table element nicht gültig ist oder in der falsche Reihenfolge angezeigt wird.

Zur aktuellen XML:

Die Reihenfolge des template Wertes ist jetzt grad -> 3,3,3 -> 4,4,4,4 -> 5,5,5,5,5 -> 3,3,3 = Fehler
Bei dieser Reihenfolge geht es problemlos -> 3,3,3 -> 4,4,4,4 -> 5,5,5,5,5 = Funktioniert

Sobald ich eine weitere Tabelle erstellen möchte bzw. Anhänge kommt der Fehler -> https://ibb.co/vZ2QFYg

Wie kann ich den eine schleife programmieren die immer alle weiteren PRODUCT_GROUP Elemente prüft?

Danke nochmal für die bisherige Hilfe.


Anbei die aktuelle 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"/>
<GRUPPE>
<xsl:apply-templates select="Root/FIRMA/PRODUCT_GROUPS"/>
</GRUPPE>
</FIRMA>
</xsl:template>


<xsl:template match="SERIES_NAME">
<SERIE>
<PRODUKTNAME aid:pstyle="Produktname" >
<xsl:value-of select="PRODUKTNAME"/>
<xsl:text>&#xA;</xsl:text>
</PRODUKTNAME>
</SERIE>
</xsl:template>

<xsl:template match="PRODUCT_GROUPS">

<xsl:choose>

<xsl:when test="PRODUCT_GROUP">
<xsl:variable name="width-pricefield" select="(20)"/>

<!-- TEMPLATE MIT 3 -->
<xsl:if test="PRODUCT_GROUP[@template='3']">
<PRODUKTGRUPPE-MIT-3>
<PRICES>

<xsl:variable name="num-of-price-columns" select="3"/>
<xsl:variable name="trows-attribute-value" select="count(//PRODUCT_GROUP[@template='3'][1]/ITEM_PRICE) + 1"/>
<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/"
aid5:tablestyle="Tabelle_RB"
aid:table="table"
aid:trows="{$trows-attribute-value}"
aid:tcols="4">

<cell aid:table="cell" aid:theader="" aid:crows="1" aid:ccols="1"></cell>

<xsl:for-each select="//PRODUCT_GROUP[@template='3']">
<cell aid:table="cell" aid:theader="" aid:crows="1" aid:ccols="1"><xsl:value-of select="PRODUCT_GROUP_TITLE"/></cell>
</xsl:for-each>

<xsl:for-each select="//PRODUCT_GROUP[@template='3']/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="{$width-pricefield}">
<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>&#xA;</xsl:text>

</PRICES>
</PRODUKTGRUPPE-MIT-3>
</xsl:if>

<!-- TEMPLATE MIT 4 -->
<xsl:if test="PRODUCT_GROUP[@template='4']">
<PRODUKTGRUPPE-MIT-4>
<PRICES>

<xsl:variable name="num-of-price-columns" select="4"/>
<xsl:variable name="trows-attribute-value" select="count(//PRODUCT_GROUP[@template='4'][1]/ITEM_PRICE) + 1"/>
<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/"
aid5:tablestyle="Tabelle_RB"
aid:table="table"
aid:trows="{$trows-attribute-value}"
aid:tcols="5">

<cell aid:table="cell" aid:theader="" aid:crows="1" aid:ccols="1"></cell>

<xsl:for-each select="//PRODUCT_GROUP[@template='4']">
<cell aid:table="cell" aid:theader="" aid:crows="1" aid:ccols="1"><xsl:value-of select="PRODUCT_GROUP_TITLE"/></cell>
</xsl:for-each>

<xsl:for-each select="//PRODUCT_GROUP[@template='4']/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="{$width-pricefield}">
<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>&#xA;</xsl:text>

</PRICES>
</PRODUKTGRUPPE-MIT-4>
</xsl:if>

<!-- TEMPLATE MIT 5 -->
<xsl:if test="PRODUCT_GROUP[@template='5']">
<PRODUKTGRUPPE-MIT-5>
<PRICES>
<xsl:variable name="num-of-price-columns" select="5"/>
<xsl:variable name="trows-attribute-value" select="count(//PRODUCT_GROUP[@template='5'][1]/ITEM_PRICE) + 1"/>


<xsl:variable name="width" select="((523.276 + $width-pricefield) div 11)"/>
<xsl:variable name="width-price" select="($width * 2)"/>

<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"
aid5:tablestyle="Tabelle_RB"
aid:table="table"
aid:trows="{$trows-attribute-value}"
aid:tcols="6">

<cell aid:table="cell" aid:theader="" aid:crows="1" aid:ccols="1"></cell>

<xsl:for-each select="//PRODUCT_GROUP[@template='5']">
<cell aid:table="cell" aid:theader="" aid:crows="1" aid:ccols="1"><xsl:value-of select="PRODUCT_GROUP_TITLE"/></cell>
</xsl:for-each>

<xsl:for-each select="//PRODUCT_GROUP[@template='5']/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="{$width-pricefield}">
<xsl:value-of select="PRICE_FIELD"/>
</cell>
</xsl:if>

<cell aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="{$width-price}">
<xsl:apply-templates select="PRICE"/>
</cell>

</xsl:for-each>
</table>
</xsl:element>

<xsl:text>&#xA;</xsl:text>

</PRICES>
</PRODUKTGRUPPE-MIT-5>
</xsl:if>

</xsl:when>

<xsl:otherwise>
<xsl:text>Keine Produktgruppe ziehen!</xsl:text>
</xsl:otherwise>

</xsl:choose>

</xsl:template>


<xsl:template match="PRICE">
<xsl:value-of select="."/>
</xsl:template>

</xsl:stylesheet>




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">
<PRODUCT_GROUP_TITLE>Produktgruppe1</PRODUCT_GROUP_TITLE>
<ITEM_PRICE>
<PRICE_FIELD>1</PRICE_FIELD>
<PRICE>10 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>2</PRICE_FIELD>
<PRICE>20 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>3</PRICE_FIELD>
<PRICE>30 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>4</PRICE_FIELD>
<PRICE>40 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>5</PRICE_FIELD>
<PRICE>50 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>6</PRICE_FIELD>
<PRICE>60 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>7</PRICE_FIELD>
<PRICE>70 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>8</PRICE_FIELD>
<PRICE>80 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>9</PRICE_FIELD>
<PRICE>90 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>10</PRICE_FIELD>
<PRICE>100 €</PRICE>
</ITEM_PRICE>
</PRODUCT_GROUP>

<PRODUCT_GROUP template="3">
<PRODUCT_GROUP_TITLE>Produktgruppe2</PRODUCT_GROUP_TITLE>
<ITEM_PRICE>
<PRICE_FIELD>1</PRICE_FIELD>
<PRICE>110 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>2</PRICE_FIELD>
<PRICE>120 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>3</PRICE_FIELD>
<PRICE>130 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>4</PRICE_FIELD>
<PRICE>140 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>5</PRICE_FIELD>
<PRICE>150 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>6</PRICE_FIELD>
<PRICE>160 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>7</PRICE_FIELD>
<PRICE>170 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>8</PRICE_FIELD>
<PRICE>180 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>9</PRICE_FIELD>
<PRICE>190 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>10</PRICE_FIELD>
<PRICE>200 €</PRICE>
</ITEM_PRICE>
</PRODUCT_GROUP>

<PRODUCT_GROUP template="3">
<PRODUCT_GROUP_TITLE>Produktgruppe3</PRODUCT_GROUP_TITLE>
<ITEM_PRICE>
<PRICE_FIELD>1</PRICE_FIELD>
<PRICE>210 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>2</PRICE_FIELD>
<PRICE>220 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>3</PRICE_FIELD>
<PRICE>230 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>4</PRICE_FIELD>
<PRICE>240 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>5</PRICE_FIELD>
<PRICE>250 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>6</PRICE_FIELD>
<PRICE>260 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>7</PRICE_FIELD>
<PRICE>270 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>8</PRICE_FIELD>
<PRICE>280 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>9</PRICE_FIELD>
<PRICE>290 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>10</PRICE_FIELD>
<PRICE>300 €</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_GROUP template="3">
<PRODUCT_GROUP_TITLE>Produktgruppe1</PRODUCT_GROUP_TITLE>
<ITEM_PRICE>
<PRICE_FIELD>10</PRICE_FIELD>
<PRICE>10 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>20</PRICE_FIELD>
<PRICE>20 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>30</PRICE_FIELD>
<PRICE>30 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>40</PRICE_FIELD>
<PRICE>40 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>50</PRICE_FIELD>
<PRICE>50 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>60</PRICE_FIELD>
<PRICE>60 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>70</PRICE_FIELD>
<PRICE>70 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>80</PRICE_FIELD>
<PRICE>80 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>90</PRICE_FIELD>
<PRICE>90 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>100</PRICE_FIELD>
<PRICE>100 €</PRICE>
</ITEM_PRICE>
</PRODUCT_GROUP>

<PRODUCT_GROUP template="3">
<PRODUCT_GROUP_TITLE>Produktgruppe2</PRODUCT_GROUP_TITLE>
<ITEM_PRICE>
<PRICE_FIELD>10</PRICE_FIELD>
<PRICE>110 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>20</PRICE_FIELD>
<PRICE>120 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>30</PRICE_FIELD>
<PRICE>130 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>40</PRICE_FIELD>
<PRICE>140 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>50</PRICE_FIELD>
<PRICE>150 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>60</PRICE_FIELD>
<PRICE>160 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>70</PRICE_FIELD>
<PRICE>170 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>80</PRICE_FIELD>
<PRICE>180 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>90</PRICE_FIELD>
<PRICE>190 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>10</PRICE_FIELD>
<PRICE>200 €</PRICE>
</ITEM_PRICE>
</PRODUCT_GROUP>

<PRODUCT_GROUP template="3">
<PRODUCT_GROUP_TITLE>Produktgruppe3</PRODUCT_GROUP_TITLE>
<ITEM_PRICE>
<PRICE_FIELD>10</PRICE_FIELD>
<PRICE>210 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>20</PRICE_FIELD>
<PRICE>220 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>30</PRICE_FIELD>
<PRICE>230 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>40</PRICE_FIELD>
<PRICE>240 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>50</PRICE_FIELD>
<PRICE>250 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>60</PRICE_FIELD>
<PRICE>260 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>70</PRICE_FIELD>
<PRICE>270 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>80</PRICE_FIELD>
<PRICE>280 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>90</PRICE_FIELD>
<PRICE>290 €</PRICE>
</ITEM_PRICE>
<ITEM_PRICE>
<PRICE_FIELD>100</PRICE_FIELD>
<PRICE>300 €</PRICE>
</ITEM_PRICE>
</PRODUCT_GROUP>


</PRODUCT_GROUPS>

</FIRMA>
</Root>



als Antwort auf: [#581500]
(Dieser Beitrag wurde von msassanelli am 21. Okt 2021, 13:39 geändert)

Automatisierte Tabellen mit XML erstellen

drerol74
Beiträge gesamt: 507

22. Okt 2021, 16:38
Beitrag # 10 von 17
Beitrag ID: #581513
Bewertung:
(16985 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

probiere mal das Stylesheet im Anhang. Es ist eine Möglichkeit, wie man so etwas lösen könnte. Man nimmt immer einen Teil der Elemente am Anfang weg und schickt die restlichen nochmal in das Template.

Ich finde trotzdem, du machst dir das Leben unnötig schwer mit deiner XML-Struktur. Woher kommen denn eigentlich die Daten?

Schöne Grüße
Roland


als Antwort auf: [#581504]
Anhang:
id_tabelle_re.xsl (4.72 KB)

Automatisierte Tabellen mit XML erstellen

msassanelli
Beiträge gesamt: 12

25. Okt 2021, 12:18
Beitrag # 11 von 17
Beitrag ID: #581526
Bewertung:
(16525 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Roland,

vielen liebe Dank nochmal für die großzügige Hilfe.

Das war schon so gut wie die Lösung meines Problems.

Habe die XSL nochmal angepasst und nun die Spaltenbreite für die jeweiligen Tabellen gesetzt. Funktioniert jetzt tadellos.

Meine vorerst letzte Frage ist nun:

Wie kann ich nun jede Tabelle die erstellt wird (sei es 3,4 oder 5-Spatlig) auf einer neuen Seite platzieren.

Den JS Code Ansatz habe ich ja bereits zum platzieren der XML.

Dieser JS Code spuckt mir die allererste Tabelle aus und platziert Sie in meinem Dokument.
Wie oben erwähnt möchte ich jede Tabelle einzeln auslesen und jeweils auf einer Seite platzieren. Also denke ich das nach jedem Durchlauf eine neue Seite generiert bzw. erstellt werden soll.

Bisher sieht das ganze dann so aus wenn ich das folgende Skript ausführe.
---> https://ibb.co/Lh3ZP2r

Vielen dank nochmal für alles bisherige.


Javascript

Code
var myDocument = app.documents.item(0); 
var sitenumber = 0; <--- Dies müsste denke ich ein Counter werden der nach jedem Durchlauf hochgezählt wird

var inhalt = myDocument.xmlElements.item(0).xmlElements.item(0).xmlElements.item(1).xmlElements.item(0); <-- Hiermit lese ich bisher die 1.Tabelle mit 3-Spalten aus wie ich das Dynamisch für jede mache weiß ich leider nicht.



set_textfeld(inhalt);

function set_textfeld(inhalt){
var myPage = myDocument.pages.item(sitenumber);
var myTextFrame = myPage.textFrames.add();
myTextFrame.sendToBack();

inhalt.placeXML(myTextFrame);
myTextFrame.geometricBounds = myGetBounds();
return
}

function myGetBounds(){
myPage = myDocument.pages.item(sitenumber);
if(myPage.side == PageSideOptions.rightHand ){
var myX1 = 36; var myX2 = 559.276;
} else {
var myX1 = 36; var myX2 = 559.276;
}

var myY1 = 36;
var myY2 = myY1+769.89;
return [myY1, myX1, myY2, myX2];
}



als Antwort auf: [#581513]

Automatisierte Tabellen mit XML erstellen

msassanelli
Beiträge gesamt: 12

25. Okt 2021, 16:24
Beitrag # 12 von 17
Beitrag ID: #581531
Bewertung:
(16469 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hey Roland,

also ich habe neue Errungenschaften.

Mittlerweile habe ich einen Loop Programmiert der die einzelne Tabelle auf einer Seite platziert(Links oder Rechts) jedoch nur wenn ich eine gewisse Anzahl an Seiten vorher händisch gesetzt habe, Bsp. 10 Tabellen, vorher muss ich mind. 10 Seiten anlegen sonst wird der loop nur einmal ausgeführt.

Ich versuche nun mittels XPathExpression in JS die Anzahl der "Tabelle" Elemente auszulesen, dies funktioniert auch wenn ich die Anzahl der Elemente die dem "FIRMA" Element unterliegen. Hierzu spuckt es mir "1" aus wenn ich nach "SERIE" oder "PRODUKTGRUPPEN" suche. Sobald ich jedoch eine Ebene tiefer gehen möchte spuckt es nur noch "0" aus obwohl die Elemente defintiv vorhanden sind (siehe XML Export)

Bin grade wie am verzweifeln, weshalb ich das Elemente in seiner Ebene nicht erreichen kann.

Vielen dank nochmals.


Code
var myDocument = app.documents.item(0); 

var docLength = myDocument.pages.length;
var sitenumber = 0;

var root = myDocument.xmlElements[0].xmlElements[0].xmlElements.item(0);


var anzahl_tabellen = root.evaluateXPathExpression("Tabelle").length;

tabellenGefunden();

/*Die Funktion ist ist nur fürs Debugging */

function tabellenGefunden() {
alert (anzahl_tabellen);
}


if (anzahl_tabellen < 1) {

for(var i = 0; i < anzahl_tabellen; i++) {

myDocument.pages.add();

var xmlInhalt = myDocument.xmlElements.item(0).xmlElements.item(0).xmlElements.item(1);
var tabellen = xmlInhalt.xmlElements.item(i);

set_textfeld(tabellen);

function set_textfeld(tabellen){
var myPage = myDocument.pages.item(sitenumber);
var myTextFrame = myPage.textFrames.add();
myTextFrame.sendToBack();

tabellen.placeXML(myTextFrame);
myTextFrame.geometricBounds = myGetBounds();
return
}

function myGetBounds(){
myPage = myDocument.pages.item(sitenumber);

if(myPage.side === PageSideOptions.rightHand ){
var myX1 = 36; var myX2 = 559.276;
} else {
var myX1 = 631.276; var myX2 = myX1+523.276;
}
var myY1 = 36;
var myY2 = myY1+769.89;
return [myY1, myX1, myY2, myX2];
}
sitenumber = sitenumber+1;
}

} else {
alert("Keine Produktgruppen gefunden!");
}



Das hier ist die XML die ich auch InDesign exportiert habe. Vorher habe ich natürlich beim importieren die XSL ausgewählt.

Das hier ist dann die Formatierung.

Code
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Root>
<FIRMA xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/"
xmlns:aid5="http://ns.adobe.com/AdobeInDesign/5.0/">
<SERIE>
<PRODUKTNAME aid:pstyle="Produktname">Musterprodukt&#8233;</PRODUKTNAME>
</SERIE>
<PRODUKTGRUPPEN>
<Tabelle>
<ELEMENT aid:pstyle="ZusatzProduktPreis">
<table aid5:tablestyle="Tabelle_RB"
xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/" aid:table="table" aid:trows="11" aid:tcols="4">
<cell aid:table="cell" aid:theader="" aid:crows="1" aid:ccols="1" aid:ccolwidth="20"></cell>
<cell aid:table="cell" aid:theader="" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">
<TITLE aid:pstyle="ZusatzProduktTitel">Produktgruppe1&#8233;</TITLE>
<DESCRIPTION aid:pstyle="ZusatzProduktBeschreibung">Lorem ipsum dolor sit amet, consetetur sadipscing elitr.&#8233;</DESCRIPTION>
<ANZAHL aid:pstyle="ZusatzProduktBeschreibung">&#8233;&#8233;2 x</ANZAHL>
</cell>
<cell aid:table="cell" aid:theader="" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">
<TITLE aid:pstyle="ZusatzProduktTitel">Produktgruppe2&#8233;</TITLE>
<DESCRIPTION aid:pstyle="ZusatzProduktBeschreibung">Lorem ipsum dolor sit amet, consetetur sadipscing elitr.&#8233;</DESCRIPTION>
<ANZAHL aid:pstyle="ZusatzProduktBeschreibung">&#8233;&#8233;2 x</ANZAHL>
</cell>
<cell aid:table="cell" aid:theader="" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">
<TITLE aid:pstyle="ZusatzProduktTitel">Produktgruppe3&#8233;</TITLE>
<DESCRIPTION aid:pstyle="ZusatzProduktBeschreibung">Lorem ipsum dolor sit amet, consetetur sadipscing elitr.&#8233;</DESCRIPTION>
<ANZAHL aid:pstyle="ZusatzProduktBeschreibung">&#8233;&#8233;2 x</ANZAHL>
</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="20">11</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">10 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">110 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">210 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="20">12</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">20 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">120 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">220 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="20">13</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">30 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">130 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">230 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="20">14</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">40 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">140 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">240 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="20">15</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">50 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">150 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">250 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="20">36</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">60 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">160 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">260 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="20">37</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">70 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">170 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">270 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="20">38</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">80 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">180 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">280 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="20">39</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">90 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">190 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">290 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="20">40</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">100 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">200 €</cell>
<cell aid:pstyle="ZusatzProduktPreis" aid:table="cell" aid:crows="1" aid:ccols="1" aid:ccolwidth="167.7586666667">300 €</cell>
</table>
</ELEMENT>
</Tabelle>
</PRODUKTGRUPPEN>
</FIRMA>
</Root>



als Antwort auf: [#581526]

Automatisierte Tabellen mit XML erstellen

drerol74
Beiträge gesamt: 507

25. Okt 2021, 20:03
Beitrag # 13 von 17
Beitrag ID: #581533
Bewertung:
(16425 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Wie oben erwähnt möchte ich jede Tabelle einzeln auslesen und jeweils auf einer Seite platzieren.


Da sich deine Tabellen in einem Absatz mit eigenem Absatzformat befinden, könntest du in diesem unter Umbruchoptionen -> nächste Seite festlegen, dass diese Absätze jeweils auf einer neuen Seite beginnen und mit einem Textfluss arbeiten. (Eventuell auch mit automatischem Textfluss und einem primären Textrahmen.)


Antwort auf: var root = myDocument.xmlElements[0].xmlElements[0].xmlElements.item(0);
var anzahl_tabellen = root.evaluateXPathExpression("Tabelle").length;


Du erwischt hier das SERIE-Element und mit deinem xPath-Ausdruck adressierst du dann nur Tabellen als direkte Kinder des SERIE-Elements. Mit item(1) sollte es klappen.

Oder ein relativer xPath-Ausdruck vom root-Element aus

Code
var root  = app.activeDocument.xmlElements[0]; 
root.evaluateXPathExpression("FIRMA/PRODUKTGRUPPEN/Tabelle")


unabhängig von der Hierarchiestufe (nicht so effizient)

Code
root.evaluateXPathExpression("//Tabelle") 



Schöne Grüße
Roland


als Antwort auf: [#581531]

Automatisierte Tabellen mit XML erstellen

msassanelli
Beiträge gesamt: 12

10. Nov 2021, 16:23
Beitrag # 14 von 17
Beitrag ID: #581677
Bewertung:
(14515 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Roland,

bin nun wieder dazu gekommen an diesem Projekt weiter zu arbeiten.

Soweit funktioniert die Erstellung der Tabellen im Loop und generiert wird auch pro Tabelle eine neue Seite.

Vielen dank für die Hilfe das ich an diesen Punkt gekommen.

Jetzt gerade stecke ich wieder an einer blöden Stelle fest und verstehe nicht wie ich weiter komme.

Ich möchte den Skalierungs Wert aus meiner XML lesen. Ich weiß das ich bereits bei var skalierungsFaktor, das richtige Element anspreche, bekomme jedoch nicht den eigentlich Wert ausgespuckt. Wichtig für mich wäre zu wissen wie erhalte ich das Attribut und wie den Wert des Elements?

Vielen Dank schonmal für die Hilfe. Zum nächsten 1. des Monats muss auf jeden Fall die Premium Mitgliedschaft her. Dieses Forum ist zu gut. Danke nochmal.

XML
Code
<Root> 
<FIRMA>

<SERIES_NAME>
<PRODUKTNAME>Musterprodukt</PRODUKTNAME>
<SKALIERUNGSFAKTOR faktor="25">25</SKALIERUNGSFAKTOR>
</SERIES_NAME>

</FIRMA>

</Root>



JS
Code
 

var serie = myDocument.xmlElements.item(0).xmlElements.item(0).xmlElements.item(0);
var skalierungsFaktor = serie.xmlElements.item(0);
var faktor = skalierungsFaktor.toString();



als Antwort auf: [#581533]

Automatisierte Tabellen mit XML erstellen

drerol74
Beiträge gesamt: 507

10. Nov 2021, 23:19
Beitrag # 15 von 17
Beitrag ID: #581679
Bewertung:
(14477 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
An die Attribute kommts du hiermit

Code
XMLElement.xmlAttributes 


an den Inhalt mit

Code
XMLElement.contents 


Zum Nachsehen, findest du hier alle Eigenschaften für XMLElement:
https://www.indesignjs.de/extendscriptAPI/indesign13/#XMLElement.html

Schöne Grüße
Roland


als Antwort auf: [#581677]
X