[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Script für XML Import

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

Script für XML Import

bernd.richter
Beiträge gesamt: 44

15. Mär 2010, 09:54
Beitrag # 1 von 13
Bewertung:
(14232 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen Zusammen!

Ich möchte gerne den XML Import automatisieren, um es einfach benutzerfreundlicher zu gestalten und Fehlerquellen zu minimieren.

Dazu möchte ich ein Script erstellen, dass den XML Importdialog in InDesign ersetzt.

Das heißt, wenn ich das Script starte, soll ein Ordner nach einer XML durchsucht werden, diese dann geladen werden, eine XSLT Datei ausgewählt werden, und bei den Importoptionen die beiden Punkte "Nur Elemente importieren die der vorhandenen Struktur entsprechen" und "Inhalte von Elementen, die nur Leerräume enthalten nicht importieren" gewählt werden.

Bisher habe ich folgenden Code-Schnipsel gefunden, der den XML Import managen sollte:

Code
// Pfade 
var sourceFolder= "/c/Projekt/XML";


// Quellordner nach XML-Dateien durchsuchen
var xmlFiles = Folder(sourceFolder).getFiles ("*.xml");

// Falls Dateien gefunden wurden
if(xmlFiles.length > 0 ){

// Schleife für jede Datei
for( var c = 0 ; xmlFiles[c] ; c++ ){
app.activeDocument.importXML(xmlFiles[c]);
}


Nach einigem Suche konnte ich aber zu Folgendem nichts finden:
Wie kann ich jedoch noch eine XSLT auswählen und die Import-Optionen angeben?
Ist das überhaupt möglich?

Ach ja, am Besten sollte das Script in CS3 und CS4 funktionieren...

Freue mich über jegliche Hilfe,
und nen guten Start in die Woche!

Grüße,

Bernd

(Dieser Beitrag wurde von bernd.richter am 15. Mär 2010, 09:59 geändert)
X

Script für XML Import

Martin Fischer
  
Beiträge gesamt: 12783

15. Mär 2010, 10:05
Beitrag # 2 von 13
Beitrag ID: #436483
Bewertung:
(14195 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Bernd,

es gibt die app.xmlImportPreferences und die document.xmlImportPreferences.

Dort findest Du die properties allowTransform und transformFilename nebst weiteren Importoptionen.


als Antwort auf: [#436480]

Script für XML Import

bernd.richter
Beiträge gesamt: 44

15. Mär 2010, 10:50
Beitrag # 3 von 13
Beitrag ID: #436494
Bewertung:
(14180 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi Martin,

danke für den Tipp! Habe den Code jetzt auch beim Adobe InDesign CS4 JavaScript Guide http://www.adobe.com/.../indesign/scripting/ gefunden!

Demnach sollte mein Script so aussehen:

Code
//The following properties are only used when the 
//AllowTransform property is set to True.
//myXMLImportPreferences.transformFilename = "c:\myTransform.xsl"
//If you have defined parameters in your XSL file, then you can pass
//parameters to the file during the XML import process. For each parameter,
//enter an array containing two strings. The first string is the name of the
//parameter, the second is the value of the parameter.
//myXMLImportPreferences.transformParameters = [["format", "1"]];

myDocument.importXML(File("/c/xml_test.xml"));

var myDocument = app.documents.add();

var myXMLImportPreferences = myDocument.xmlImportPreferences;

myXMLImportPreferences.importStyle = XMLImportStyles.mergeImport;

myXMLImportPreferences.createLinkToXML = true;

myXMLImportPreferences.allowTransform = true;

myXMLImportPreferences.transformFilename = "c:\myTransform.xsl"

myXMLImportPreferences.repeatTextElements = false;
myXMLImportPreferences.removeUnmatchedExisting = false;

myXMLImportPreferences.ignoreUnmatchedIncoming = true;

myXMLImportPreferences.importTextIntoTables = false;

myXMLImportPreferences.ignoreWhitespace = true;

myXMLImportPreferences.importCALSTables = false;
myXMLImportPreferences.importToSelected = false;


Das letzte Problem: Wie sehen die Pfadangaben in OSX aus?
Da die Dateien auf nem Serverlaufwerk liegen, muss dieser natürlich vorher verbunden werden.
Sieht der Pfad dann ungefähr so aus?

/VOLUME/Server/DB/Transformation/Trans.xml


als Antwort auf: [#436483]
(Dieser Beitrag wurde von bernd.richter am 15. Mär 2010, 11:01 geändert)

Script für XML Import

chris33
Beiträge gesamt: 189

15. Mär 2010, 11:17
Beitrag # 4 von 13
Beitrag ID: #436498
Bewertung:
(14162 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi Bernd,
lade die Datei doch testweise mit einem Open Dialog und lass dir den zurückgegebenen Pfad mit einem Alert anzeigen. Dann weißt du es sicher.(?)


als Antwort auf: [#436494]

Script für XML Import

bernd.richter
Beiträge gesamt: 44

15. Mär 2010, 12:21
Beitrag # 5 von 13
Beitrag ID: #436509
Bewertung:
(14155 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi Chris,

danke für deinen Ansatz! Leider sind meine JS-Skills nicht gerade ausgeprägt...
Ich habe es aber über den Importieren-Dialog versucht, und der zeigt dir den Pfad der XSLT Datei an, die man importieren will. Da in meinem Fall .xml und xslt. im gleichen Ordner liegen reicht mir das vollkommen.
Der Pfad sieht so aus:

Server:DB:Import:Tabelle.xml

Hierbei bekomme ich jedoch folgende Fehlermeldung:

Code
JavaScript Fehler! 

Fehlernummer: 21
Fehlerzeichenfolge: undefined ist kein Objekt

Datei: /Applications/Adobe InDesign CS4/Scripts/Scripts Panel/Import.jsx
Zeile: 10
Quelle:
myDocument.importXML(File("Server:DB:Import:Tabelle.xml"));


Also stimmt der Pfad doch nicht?


als Antwort auf: [#436498]

Script für XML Import

bernd.richter
Beiträge gesamt: 44

15. Mär 2010, 12:28
Beitrag # 6 von 13
Beitrag ID: #436511
Bewertung:
(14150 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Stopp!
Ich bin zu blöd!
Ich muss natürlich erst die Variable deklarieren, bevor ich sie benutzen kann;)
Das Script läuft dann ab, und Importiert die XML.
Leider unverändert, das heißt, die XSLT Transformation per Script funktioniert nicht!
In der Strukturansicht sind die Tags der XML vorhanden, aber nicht die der Transformierten, per Hand klappt die Transformation einwandfrei.
Ist evtl etwas an den Importfunktionen falsch, oder stimmt der XSLT Pfad nicht?


als Antwort auf: [#436509]

Script für XML Import

bernd.richter
Beiträge gesamt: 44

15. Mär 2010, 12:53
Beitrag # 7 von 13
Beitrag ID: #436516
Bewertung:
(14140 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo nochmal, ich bin wieder einen Schritt weiter.
Bei jedem Import wurde ein neues Dokument generiert, was natürlich Quatsch ist, da alles im aktiven Dokument ablaufen soll, was für den XML Import vorbereitet ist.
Ich habe das Script angepaßt, nur leide rfunktioniert die XSLT Transformation immer noch nicht.
Die XML Daten werden unverändert importiert, in der Strukturansicht sieht man den Tag-Baum der XML-File unterhalb meiner vorbereiteten Tags.

Code
//The following properties are only used when the 
//AllowTransform property is set to True.
//myXMLImportPreferences.transformFilename = "c:\myTransform.xsl"
//If you have defined parameters in your XSL file, then you can pass
//parameters to the file during the XML import process. For each parameter,
//enter an array containing two strings. The first string is the name of the
//parameter, the second is the value of the parameter.
//myXMLImportPreferences.transformParameters = [["format", "1"]];

var activeDocument = app.activeDocument
app.activeDocument.importXML(File("Server:DB:Import:Tabelle.xml"));
var myXMLImportPreferences = activeDocument.xmlImportPreferences;
myXMLImportPreferences.allowTransform = true;
myXMLImportPreferences.transformFilename = "Server:DB:Import:import.xslt"
myXMLImportPreferences.createLinkToXML = true;
myXMLImportPreferences.ignoreUnmatchedIncoming = true;
myXMLImportPreferences.ignoreWhitespace = true;
myXMLImportPreferences.importCALSTables = false;
myXMLImportPreferences.importStyle = XMLImportStyles.mergeImport;
myXMLImportPreferences.importTextIntoTables = false;
myXMLImportPreferences.importToSelected = false;
myXMLImportPreferences.removeUnmatchedExisting = false;
myXMLImportPreferences.repeatTextElements = true;


Was könnte nicht stimmen?


als Antwort auf: [#436511]
(Dieser Beitrag wurde von bernd.richter am 15. Mär 2010, 12:55 geändert)

Script für XML Import

Martin Fischer
  
Beiträge gesamt: 12783

15. Mär 2010, 13:22
Beitrag # 8 von 13
Beitrag ID: #436520
Bewertung:
(14121 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hast Du' mal mit folgender Pfad-Notation versucht:

Code
myXMLImportPreferences.transformFilename = "/c/myTransform.xsl" 



als Antwort auf: [#436516]

Script für XML Import

bernd.richter
Beiträge gesamt: 44

15. Mär 2010, 13:49
Beitrag # 9 von 13
Beitrag ID: #436524
Bewertung:
(14112 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke Martin,

ich habe bereits verschiedene Pfadangaben mit allen möglichen //, / , \\, \ meines Pfades durchprobiert, leider ohne Erfolg...


als Antwort auf: [#436520]

Script für XML Import

Martin Fischer
  
Beiträge gesamt: 12783

15. Mär 2010, 14:13
Beitrag # 10 von 13
Beitrag ID: #436528
Bewertung:
(14097 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Du änderst die Preferences in der Variable myXMLImportPreferences, weist sie später aber nicht mehr den Import-Preferences des Dokuments zu. Das Dokument erfährt also nichts von den getroffenen Einstellungen. ;-)

Versuch mal das
Code
with  (activeDocument.xmlImportPreferences) 
{
allowTransform = true;
transformFilename = "/Server/DB/Import/import.xslt"
createLinkToXML = true;
ignoreUnmatchedIncoming = true;
ignoreWhitespace = true;
importCALSTables = false;
importStyle = XMLImportStyles.mergeImport;
importTextIntoTables = false;
importToSelected = false;
removeUnmatchedExisting = false;
repeatTextElements = true;
}



als Antwort auf: [#436524]
(Dieser Beitrag wurde von Martin Fischer am 15. Mär 2010, 14:15 geändert)

Script für XML Import

bernd.richter
Beiträge gesamt: 44

15. Mär 2010, 14:53
Beitrag # 11 von 13
Beitrag ID: #436536
Bewertung:
(14086 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke, Martin!

Leider funktioniert deine Lösung auch nicht richtig.
Bin aber trotzdem weitergekommen:
Nach dem ersten ausführen des Scriptes, wird die XML Struktur geladen. Klicke ich ein weiteres Mal auf das Script, kommt diese Fehlermeldung:
Code
In der XSLT-Verarbeitungsanweisung angegebenes Stylesheet "/Applications/Adobe InDesign CS4/Scripts/XHTML For Digital Editions/:Server:DB:Import:import.xslt" kann nicht gefunden werden. Datei wurde ohne Transformation importiert. 


Diese Meldung taucht sowohl bei meiner, als auch deiner Lösung auf. Also habe ich meine xslt-Datei in XHTML For Digital Editions hinterlegt und im Script die Datei ohne Pfad verknüpft.

Wenn ich jetzt das Script wiederum 2 mal ausführe, funktioniert der Import! Das freut mich sehr!

Jedoch stören mich diese Sachen:

Wieso muss das XSLT Sheet lokal vorhanden sein wenn ich es im Script eigtl verlinken könnte? Anscheinend sucht InDesign hier in einem Standardverzeichnis danach, welches nicht geändert werden kann.

Das Script scheint außerdem nicht ganz richtig zu sein, da ich es wie erwähnt zweimal ausführen muss. Außerdem erscheint im InDesign Script Fenster ein Fehlersymbol bei diesem Script.

Naja, es funktioniert zumindest, wenn auch etwas holprig!

Wenn jemand noch Rat weiß, wäre ich sehr dankbar!

Gruß Bernd


als Antwort auf: [#436528]

Script für XML Import

zaphodbeeblebroxx
Beiträge gesamt: 408

15. Mär 2010, 23:43
Beitrag # 12 von 13
Beitrag ID: #436583
Bewertung:
(14030 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen


als Antwort auf: [#436536]

Script für XML Import

bernd.richter
Beiträge gesamt: 44

16. Mär 2010, 09:21
Beitrag # 13 von 13
Beitrag ID: #436597
Bewertung:
(14005 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen Matthias,

danke für den Hinweis, das beschreibt genau mein Problem! Also ist es anscheinend ein Bug...
Leider hilft mir die Escape-Sequenz für Leerzeichen die im anderen Thread empfohlen wurde nicht wirklich weiter, da ich in meinem Pfad keine Leerzeichen habe. An dem kann es also nicht liegen, denke ich mal.
Wenigstens bin ich nicht der einzige der dieses Problem hat ;)

Gruß,

Bernd


als Antwort auf: [#436583]
X