[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt AS | CS5 | XML-Element in Tabelle umwandeln …

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

AS | CS5 | XML-Element in Tabelle umwandeln …

pjoern
Beiträge gesamt: 110

13. Sep 2011, 12:24
Beitrag # 1 von 11
Bewertung:
(4543 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo liebe Helfer,

Szenario:
Eine XML-Datei wird in InDesign importiert …
Das Root-Element wird in einen Textrahmen platziert …

--
Jetzt folgt die Umwandlung jedes <Tabelle>-Elements in eine Tabelle.
Code
convert element to table row tag myRowTag cell tag myCellTag 


--
Meine Frage:
[b]Kann man dieses "Umwandeln" in eine Tabelle beschleunigen?

Derzeit bearbeite ich jedes <Tabelle>-Element in einer repeat-Schleife:

Code
set alle_Tabellen to every xml element of xml element 1 

repeat with akt_Tabelle in alle_Tabellen
tell akt_Tabelle to convert element to table row tag myRowTag cell tag myCellTag
end


Gibt es eine Möglichkeit, wie ich allen <Tabelle>-Elementen auf einmal sagen kann, dass sie sich in eine Tabelle umwandeln sollen?

Ich muss ca. 4.000 <Tabelle>-Datensätze verarbeiten … da kann sich das umwandeln schon ziehen.

--
Hinweis: CALS-Tabellen kommen hier nicht in Frage! Es geht nur über diesen "in Tabelle umwandeln"-Weg.
--



XML-Datei:
<Root>
<Tabelle>
<Zeile>
<Spalte>

</Spalte>
</Zeile>
<Zeile>
<Spalte>

</Spalte>
</Zeile>
</Tabelle>
<Tabelle>

</Root>

X

AS | CS5 | XML-Element in Tabelle umwandeln …

pjoern
Beiträge gesamt: 110

13. Sep 2011, 13:00
Beitrag # 2 von 11
Beitrag ID: #480174
Bewertung:
(4524 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Mit diesem Script kann man sich eine INDD-Datei zum Testen erstellen:

Code
--ConvertXMLElementToTable.applescript 
--An InDesign CS5 AppleScript
--
--Shows how to convert an XML element to a table.
main()
on main()
mySetup()
mySnippet()
myTeardown()
end main
on mySetup()
tell application "Adobe InDesign CS5"
set myDocument to make document
tell myDocument
--Create a series of XML tags.
set myRowTag to make XML tag with properties {name:"Row"}
set myCellTag to make XML tag with properties {name:"Cell"}
set myTableTag to make XML tag with properties {name:"Table"}
--Add XML elements.
set myRootXMLElement to XML element 1
end tell
tell myRootXMLElement
set myTableXMLElement to make XML element with properties {markup tag:myTableTag}
tell myTableXMLElement
repeat with myRowCounter from 1 to 6
set myXMLRow to make XML element with properties {markup tag:myRowTag}
tell myXMLRow
set myString to "Row " & myRowCounter
repeat with myCellCounter from 1 to 4
make XML element with properties {markup tag:myCellTag, contents:myString & ":Cell " & myCellCounter}
end repeat
end tell
end repeat
end tell
set myTableXMLElement to make XML element with properties {markup tag:myTableTag}
tell myTableXMLElement
repeat with myRowCounter from 1 to 6
set myXMLRow to make XML element with properties {markup tag:myRowTag}
tell myXMLRow
set myString to "Row " & myRowCounter
repeat with myCellCounter from 1 to 4
make XML element with properties {markup tag:myCellTag, contents:myString & ":Cell " & myCellCounter}
end repeat
end tell
end repeat
end tell
set myTableXMLElement to make XML element with properties {markup tag:myTableTag}
tell myTableXMLElement
repeat with myRowCounter from 1 to 6
set myXMLRow to make XML element with properties {markup tag:myRowTag}
tell myXMLRow
set myString to "Row " & myRowCounter
repeat with myCellCounter from 1 to 4
make XML element with properties {markup tag:myCellTag, contents:myString & ":Cell " & myCellCounter}
end repeat
end tell
end repeat
end tell
set myTableXMLElement to make XML element with properties {markup tag:myTableTag}
tell myTableXMLElement
repeat with myRowCounter from 1 to 6
set myXMLRow to make XML element with properties {markup tag:myRowTag}
tell myXMLRow
set myString to "Row " & myRowCounter
repeat with myCellCounter from 1 to 4
make XML element with properties {markup tag:myCellTag, contents:myString & ":Cell " & myCellCounter}
end repeat
end tell
end repeat
end tell
end tell
set myPage to page 1 of myDocument
tell myPage
set myTextFrame to make text frame with properties {geometric bounds:my myGetBounds(myDocument, myPage)}
end tell
end tell
end mySetup
on mySnippet()
tell application "Adobe InDesign CS5"
set myDocument to document 1
tell myDocument
set myRootXMLElement to XML element 1
set myTableXMLElement to XML element 1 of myRootXMLElement
--<fragment>
--Given an XML element "myTableXMLElement"...
set myRowTag to XML tag "Row" of myDocument
set myCellTag to XML tag "Cell" of myDocument
tell myTableXMLElement
--convert element to table row tag myRowTag cell tag myCellTag
end tell
--</fragment>
set myStory to story 1 of myDocument
tell myStory
place XML using XML element 1 of myDocument
end tell
end tell
end tell
end mySnippet
on myTeardown()
end myTeardown
on myGetBounds(myDocument, myPage)
tell application "Adobe InDesign CS5"
tell document preferences of myDocument
set myPageWidth to page width
set myPageHeight to page height
end tell
tell margin preferences of myPage
if side of myPage is left hand then
set myX2 to left
set myX1 to right
else
set myX1 to left
set myX2 to right
end if
set myY1 to top
set myY2 to bottom
end tell
set myX2 to myPageWidth - myX2
set myY2 to myPageHeight - myY2
return {myY1, myX1, myY2, myX2}
end tell
end myGetBounds



als Antwort auf: [#480167]

AS | CS5 | XML-Element in Tabelle umwandeln …

WernerPerplies
Beiträge gesamt: 2693

13. Sep 2011, 13:46
Beitrag # 3 von 11
Beitrag ID: #480179
Bewertung:
(4507 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,

Zitat Es geht nur über diesen "in Tabelle umwandeln"-Weg.


Warum?

Schon mal über den IDML-Weg nachgedacht?


als Antwort auf: [#480167]

AS | CS5 | XML-Element in Tabelle umwandeln …

madoho
Beiträge gesamt: 140

13. Sep 2011, 13:56
Beitrag # 4 von 11
Beitrag ID: #480181
Bewertung:
(4499 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Oder beim Import per XSL transformieren und gar nicht AS scripten müssen


als Antwort auf: [#480179]

AS | CS5 | XML-Element in Tabelle umwandeln …

pjoern
Beiträge gesamt: 110

13. Sep 2011, 14:28
Beitrag # 5 von 11
Beitrag ID: #480187
Bewertung:
(4480 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner Perpiles,

vielen Dank für den schnellen Hinweis!
Jetzt bin ich aber gespannt :)

Gibt es "Tutorials" etc. um "den IDML-WEG" studieren zu können?
Dieser ist für mich derzeit alles andere als transparent!

VG


als Antwort auf: [#480179]

AS | CS5 | XML-Element in Tabelle umwandeln …

pjoern
Beiträge gesamt: 110

13. Sep 2011, 14:31
Beitrag # 6 von 11
Beitrag ID: #480188
Bewertung:
(4476 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Manu,

auch dir vielen lieben Dank für die schnelle Reaktion.

Hättest Du vielleicht einen kleinen Hinweis für mich, mit welcher Operation ich die Elemente in Tabellen umwandle?

Code
<?xml version="1.0"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
???
</xsl:stylesheet>



als Antwort auf: [#480181]

AS | CS5 | XML-Element in Tabelle umwandeln …

madoho
Beiträge gesamt: 140

13. Sep 2011, 14:41
Beitrag # 7 von 11
Beitrag ID: #480190
Bewertung:
(4465 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hoi…
grad nicht viel zeit! daher schmeiß ich dir hier einfach kurz ein kleineres xsl rein, mit dem ich xml in tabelle gewandelt hab. sollte eigentlich alles mal vorkommen was du für deine struktur brauchen könntest.

mach dir mal in ein textrahmen mit einer tabelle wie du sie haben magst, tag die kurz automatisch, exportier die xml und schau dir das an. ich mach da auch immer "reversed-engineering" ;)

Code
<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">

<xsl:output method="xml" version="1.0" encoding="UTF-8" standalone="no" indent="yes"/>

<xsl:template match="root/produkte">

<Root xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/" xmlns:aid5="http://ns.adobe.com/AdobeInDesign/5.0/">

<table xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/" xmlns:aid5="http://ns.adobe.com/AdobeInDesign/5.0/">
<xsl:attribute name="aid:table">table</xsl:attribute>
<xsl:attribute name="aid5:tablestyle">table</xsl:attribute>
<xsl:attribute name="aid:trows">
<xsl:variable name="Anzahl_Zeilen" select="./produktbezeichnung"/>
<xsl:value-of select="count($Anzahl_Zeilen)"/>
</xsl:attribute>
<xsl:attribute name="aid:tcols">
<xsl:text>2</xsl:text>
</xsl:attribute>

<xsl:for-each select="produktbezeichnung">

<cell>
<xsl:attribute name="aid:table">cell</xsl:attribute>
<xsl:attribute name="aid:crows">1</xsl:attribute>
<xsl:attribute name="aid:ccols">1</xsl:attribute>
<xsl:value-of select="self::node()"/>
</cell>
<cell>
<xsl:attribute name="aid:table">cell</xsl:attribute>
<xsl:attribute name="aid:crows">1</xsl:attribute>
<xsl:attribute name="aid:ccols">1</xsl:attribute>
</cell>
</xsl:for-each>

</table>

</Root>

</xsl:template>

</xsl:stylesheet>



als Antwort auf: [#480188]

AS | CS5 | XML-Element in Tabelle umwandeln …

Thaler
Beiträge gesamt: 139

13. Sep 2011, 16:37
Beitrag # 8 von 11
Beitrag ID: #480194
Bewertung:
(4419 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo VG,
es gibt entsprechende Schemas für IDML bei Adobe. Mit IDML (oder noch besser IDMS, Format für Snippets, da ist alles in einer Datei) lässt sich vieles einfach regeln, leider gehört dazu nicht das bescheuerte IDML-Tabellenmodell.
Wenn in deinen Tabellen verbundene Zellen vorkommen, rate ich dringend ab. Wenn das funktionierende Skript, über das du verfügst, über nacht läuft, bist du sicher schneller, als wenn du mit IDML und XSLT rumarbeitest.

Gregor


als Antwort auf: [#480187]

AS | CS5 | XML-Element in Tabelle umwandeln …

WernerPerplies
Beiträge gesamt: 2693

13. Sep 2011, 16:52
Beitrag # 9 von 11
Beitrag ID: #480195
Bewertung:
(4409 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo pjoern,

die komplette Referenz findest Du hier:
http://wwwimages.adobe.com/...ml-specification.pdf

Ich gehe eigentlich immer so vor:

1. Eine InDesign-Datei mit der gewünschten Struktur als Musterdatei erzeugen.

2. Datei als IDML-Datei exportieren

3. IDML-Datei mit Verzeichnisstruktur entpacken (ZIP-Format)

Das sieht dann in etwa so aus:

http://www.weepee.de/...gn/idmlstructure.png

Deine Tabellen findest Du in einer Story-Datei im Stories-Verzeichnis.

Die Daten kann man mit einem Browser oder einem XML-Editor oder auch mit einem normalen Texteditor analysieren.

Mit einem geeigneten Programmiertool erzeugst Du Dir dann nach dem Muster eine Story mit gleichem Namen und tauscht die Datei aus.

Danach zippst Du die Dateistruktur wieder und importierst die IDML-Datei nach InDesign.

Mit ein wenig try and test kann man sich relativ schnell an eine Lösung herantasten und wird bei großen Datenmengen durch einen hohen Geschwindigkeitsgewinn belohnt.


als Antwort auf: [#480187]

AS | CS5 | XML-Element in Tabelle umwandeln …

WernerPerplies
Beiträge gesamt: 2693

13. Sep 2011, 17:02
Beitrag # 10 von 11
Beitrag ID: #480198
Bewertung:
(4408 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gregor,

XSLT verwende ich nicht, sondern C#, aber jede andere Programmiersprache geht auch.

Verbundene Zellen sind eigentlich auch nicht schwierig.

Gewöhnungsbedürftig ist allerdings, das rows, columns und cells nicht geschachtelt aufgebaut sind, sondern separat behandelt werden müssen.

Das ist aber auch keine Hexerei.

Wenn es sich um Tabellen handelt, die in der Struktur identisch sind, braucht man eigentlich nur Kopien erzeugen und kann die Zellinhalte durch Suchen und Ersetzen austauschen.

Das hängt halt von den Daten ab.


als Antwort auf: [#480194]

AS | CS5 | XML-Element in Tabelle umwandeln …

pjoern
Beiträge gesamt: 110

19. Sep 2011, 12:56
Beitrag # 11 von 11
Beitrag ID: #480473
Bewertung:
(4248 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gregor,
hallo Werner,
hallo Manu,

vielen Dank für Eure kostbaren Hinweise.
Die Lösung meines anfänglichen Problems hat sich inzwischen tatsächlich via CALS-Tabellenmodell ergeben.

Schon der XML-Export hat entsprechende XML Attribute und der Aufbau funktioniert reibungslos.

Aus Zeitgründen habe ich bisher noch nicht an der IDML-Lösung arbeiten können, sobald ich hier aber neue Erfahrungen mache, werde ich diese im Forum mitteilen.

Ich wünsche Euch einen schönen Start in die Woche!

VG
pjoern


als Antwort auf: [#480198]
X

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
02.02.2023

Prozesse optimieren und effizient gestalten

Zürich
Donnerstag, 02. Feb. 2023, 08.00 - 10.00 Uhr

Digitalisierung, Webauftritt

Digitalisierung mitgestalten - Worauf kommt es an? Wie wichtig ist die Webseite? Webseite mit Word Press? Interne Prozesse optimieren

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: Birol Isik, E-Mailinfo AT bkcc DOT ch

https://digitalisierung-heute.ch/digitalisierung-informationstag-schweiz/

Veranstaltungen
01.03.2023 - 09.03.2023

Online
Mittwoch, 01. März 2023, 00.00 Uhr - Donnerstag, 09. März 2023, 00.00 Uhr

Online Webinar

Wie gehen wir mit diesen Veränderungen um? Was ist notwendig, damit wir die Digitalisierung im Unternehmen klappt? Veränderungsprozesse verstehen und entsprechend handeln Mitarbeiter als Botschafter Webseite mit WordPress erstellen SEA /SEO (Ads aufschalten)

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: B. Isik, E-Mailinfo AT snfa DOT ch

https://www.fernstudiumfitness.ch/digitalisierung-schweiz/