hilfdirselbst.ch
Facebook Twitter gamper-media

Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » Script für XML Import

 



bernd.richter S
Beiträge: 44

15. Mär 2010, 09:54

Beitrag #1 von 13
Bewertung:

(1946 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Script für XML Import


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)
Top

Martin Fischer  M  p
Beiträge: 9698

15. Mär 2010, 10:05

Beitrag #2 von 13
Beitrag ID: #436483

Bewertung:

(1937 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Script für XML Import


Hallo Bernd,

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

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


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#436480] Top

bernd.richter S
Beiträge: 44

15. Mär 2010, 10:50

Beitrag #3 von 13
Beitrag ID: #436494

Bewertung:

(1922 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Script für XML Import


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)
Top

chris33
Beiträge: 186

15. Mär 2010, 11:17

Beitrag #4 von 13
Beitrag ID: #436498

Bewertung:

(1904 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Script für XML Import


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.(?)

Gruß Chris

als Antwort auf: [#436494] Top

bernd.richter S
Beiträge: 44

15. Mär 2010, 12:21

Beitrag #5 von 13
Beitrag ID: #436509

Bewertung:

(1897 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Script für XML Import


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] Top

bernd.richter S
Beiträge: 44

15. Mär 2010, 12:28

Beitrag #6 von 13
Beitrag ID: #436511

Bewertung:

(1892 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Script für XML Import


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] Top

bernd.richter S
Beiträge: 44

15. Mär 2010, 12:53

Beitrag #7 von 13
Beitrag ID: #436516

Bewertung:

(1882 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Script für XML Import


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)
Top

Martin Fischer  M  p
Beiträge: 9698

15. Mär 2010, 13:22

Beitrag #8 von 13
Beitrag ID: #436520

Bewertung:

(1863 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Script für XML Import


Hast Du' mal mit folgender Pfad-Notation versucht:

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



Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#436516] Top

bernd.richter S
Beiträge: 44

15. Mär 2010, 13:49

Beitrag #9 von 13
Beitrag ID: #436524

Bewertung:

(1854 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Script für XML Import


Danke Martin,

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

als Antwort auf: [#436520] Top

Martin Fischer  M  p
Beiträge: 9698

15. Mär 2010, 14:13

Beitrag #10 von 13
Beitrag ID: #436528

Bewertung:

(1839 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Script für XML Import


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;
}



Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#436524]

(Dieser Beitrag wurde von Martin Fischer am 15. Mär 2010, 14:15 geändert)
Top

bernd.richter S
Beiträge: 44

15. Mär 2010, 14:53

Beitrag #11 von 13
Beitrag ID: #436536

Bewertung:

(1828 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Script für XML Import


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] Top

zaphodbeeblebroxx p
Beiträge: 397

15. Mär 2010, 23:43

Beitrag #12 von 13
Beitrag ID: #436583

Bewertung:

(1772 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Script für XML Import


 
Hallo Bernd,

schau mal hier:
http://www.hilfdirselbst.ch/...6a0f0f6f6f783#411597


Matthias

als Antwort auf: [#436536] Top

bernd.richter S
Beiträge: 44

16. Mär 2010, 09:21

Beitrag #13 von 13
Beitrag ID: #436597

Bewertung:

(1747 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Script für XML Import


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] Top


Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » Script für XML Import


^