Nachdem ich am Scripten gescheitert bin, versuche ich meinen Arbeitsablauf nun mittels dem InDesign XML-Import zu automatisieren.
Aus einer Excel Datei lasse ich mir eine XML erzeugen. Leider ist diese dann im komplizierten Office-XML Format. Mittels einer XSLT Datei will ich nun beim XML-Import nur die relevanten Daten aus der XML ziehen und diesen Tags zuweisen, sodass diese in Indesign automatisch in die Rahmen eingefügt werden. Leider komme ich mit dem Office-XML Format nicht zurecht.
Wie kann ich mittels XLS aus obigen Beispiel den Wert "A63027A01BL" auslesen/bearbeiten. Als Ausgabe sollte dieser Ausdruck in ein <Bild href="file://A63027A01BL.EPS"></Bild> verwandelt werden, um so als Grafik nach InDesign importiert zu werden. Der Ausdruck "A63027A01BL" ändert sich bei jeder neuen Excel Datei, weshalb mein Problem ist, dass ich ihn nicht eindeutig ansprechen kann. Weiß jemand Rat, bin über jeden Ansatz dankbar!
versuch mal, den Verweis auf den Namespace-Prefix (der in deiner Quelldatei vorhanden sein sollte) in das Root-Element deines Stylesheets einzubauen. ungefähr so:
prinzipiell müsste das schon so funktionieren, wie du's oben schreibst. Kannst du mal dein ganzes Stylesheet und die Quelldatei (bzw. überschaubare Beispieldatei) posten?
eine harte Nuss, aber so langsam beginne ich's zu kapieren ... Der Knackpunkt ist, jeden Namespace immer voll mitzuziehen, auch den Default-namespace (...spreadsheet) muss man explizit aufführen.
xpath-default-namespace ist ja ne schöne Sache, das vereinfacht das deutlich!
InDesign kann allerdings kein XSLT 2.0, das kann also leider nicht direkt gehen. Mit meinem obigen Stylesheet krieg ich den Import allerdings schon hin. Hast du bei den Import-Optionen noch was falsch?
Haha, das erklärt natürlich einiges! Schade, dass InDesign den Namespace nicht unterstützt, da ich noch weitere Felder aus dieser XML auslesen muss und diese Lösung doch länger ist ;)
Der Import klappt leider nicht, wie würdest du vorgehen um den zusammengestezten Bildpfad zu generieren?
Die Import-Funktionen sollten stimmen, das Bild wird bei meiner dummy xml korrekt importiert.
Ah, sorry, ich hab eben geistig mein Stylesheet, in dem ich den Wert einfach nur so ausgelesen hatte, mit deinem an der Stelle konkreteren gemischt (du warst nämlich schon fast so weit ;-) ...). Du musst die Stelle mit dem Element Bild" mit diesem ausführlicheren Code ersetzen:
Klappt alles wunderbar! Jetzt gehts noch darum die Details zu machen und weitere Daten reinzuziehen. Aber das Problem hat mir schon einen Einblick in die Materie gegeben, der mir weiterhilft. Falls ich weitere Fragen habe, kann ich sie hoffentlich weiterhin hier posten, eventuell hilfts ja auch anderen Usern.
Leider habe ich nun schon die nächsten Probleme (immerhin habe ich es schon geschafft eine if-Abfrage zu konstruieren):
Der obige Pfad setzt sich wie folgt zusammen: //file:/60(93)A63027A01BL_k.eps Der Wert 60 muss wiederum aus der XML gelesen werden. Der Pfad setzt sich also aus zwei unterschiedlichen Werten zusammen. Den Wert kann ich auslesen, aber leider nicht im Pfad verschachteln. Außerdem soll aus 60,000 noch 60 werden.
Das andere Problem ist ich kann einen Abgefragten Wert nicht nochmal auslesen und in ein anderes Tag schreiben. Im Beispiel soll der Bild-Pfad generiert werden, aber auch der Wert in ein anderes Tag geschrieben werden.
Dieser Code extrahiert ab dem 1. Zeichen des Wertes bis zum 2. Zeichen.
Wie kann ich diesen Wert jetzt noch an den Bildpfad übergeben? Ich habe es schon mit xsl:variable und xsl:param probiert, bin aber zu keinem Ergebnis gekommen...
das kommt darauf an ... wo steht denn die Zahl, also in Relation zu deinem Cell-Element, in dem du dich wahrscheinlich befindest? Du musst dann eigentlich nur den entsprechenden relativen oder auch absoluten Pfad in deinen select-Ausdruck eingeben.
Das Problem ist, dieser Wert steht in der Zelle DATA3. Das Bild-Tag in welchem ich den Pfad angebe, generiere ich aber aus DATA4. Ich dachte ich übergebe den Wert per Variable, das funktioniert aber irgendwie nicht.
du kommst per XPath eigentlich an alle Knoten ran, wenn die Beziehung klar ist. Also: z.B.: Das Element steht dem aktuellen direkt zuvor, oder aber irgendwo in der Datei aber mit einem bestimmten Inhalt, oder ...
Wenn es sich bei Zelle, die du ansprechen willst, immer um ein vorhergehendes Geschwister mit dem "Namen" DATA3 handelt, kann dir z.B. das weiterhelfen:
Ob das aber der Königsweg ist, hängt davon ab, wie deine Eingangsdaten allgemein strukturiert sind, und was du sonst noch erreichen musst. Wenn du da weiter in die Details vordringen willst, solltest du dir unbedingt mal eine der vielen XSLT-Referenzen oder -tutorials, die es im Netz gibt, näher anschauen. Z.B. http://www.zvon.org/...ce/Output/index.html http://www.w3schools.com/...sl_w3celementref.asp Wenn du darüber einen Überblick hast, weißt du schonmal, was überhaupt machbar ist, und bekommst ein Gefühl dafür, in welcher Richtung du suchen musst. Das ist alles erstmal recht komplex, aber lohnt sich!
ich weiß es gibt viele Tutorials und Referenzen, und ich schaue auch oft bei denen nach. Leider habe ich noch keine Lösung für mein spezielles Problem gefunden.
Mein Element <Pfad> generiere ich ja im Template DATA4 und übergebe den Wert mit <xsl:value-of select="./ss:Data" />. Da ich ja in DATA4 bin, kann ich ja nicht nochmal mit <xsl:value-of select="./ss:Data" /> den Text aus DATA3 übergeben.
Dies funktioniert leider nicht da die beiden Variablen aus verschiedenen Knoten ausgelesen werden. Kann ich die Variablen global definieren? Ich habe übrigens diesmal das Feld DATA66 verwendet, da dies bei einer späteren Anwendung der Fall sein wird.