[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt XML-Tags vollständig löschen

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

XML-Tags vollständig löschen

Uli75
Beiträge gesamt: 33

17. Jun 2019, 17:49
Beitrag # 1 von 12
Bewertung:
(7036 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

wir müssten InDesign-Dokumente mit xml-Tags versehen und zusätzlich mit Attributen ergänzen. Wir bekommen von einem Lieferanten die besagten IDs zugeschickt die nicht mit den xml-Tags versehen sind. Wenn ich jedoch mittels rechtsklick auf die Rahmen gehe und in "Tag für Rahmen" schaue, sind leider doch noch "Präferenzen" enthalten.

Nun ist es so, dass ich mittels "Tags automatisch erstellen" das Tagging vornehme und die Tags per Script umbenennen möchte. Leider ist der neu zu vergebene Namen (PFBlock) identisch welche noch im Hintergrund gespeichert sind.

folgendes Script (mit Quellhinweis) werde ich:
Code
//XMLTagUmbenennen.jsx 
//https://forums.adobe.com/thread/714182

#target InDesign

var myDoc = app.activeDocument;

RenameXMLTag("Textabschnitt", "PFBlock");


function RenameXMLTag(Old, New)
{
if(myDoc.xmlTags.itemByName(Old).isValid)
{
myDoc.xmlTags.itemByName(Old).name = New;
}

}


Das Skript endet mit dem Hinweis:
[b]Fehlernummer:49089
Fehlerzeichenfolge: Ein Tag mit diesem Namen ist berreits vorhanden. Wählen Sie einen anderen Namen aus.

Folgendes Skript entfernt zwar die Tags aus der Struktur, jedoch auch nicht in den Präferenzen:
Code
//XmlTagRemove.jsx 
//Xml Tags entfernen
//https://www.hilfdirselbst.ch/foren/XML-Tags_im_Buch_entfernen_f%FCr_Indexerstellung_nach_ZF_P500691.html#500691

app.activeDocument.xmlElements.firstItem().xmlElements.everyItem().untag();


Desweiteren möchte ich im Zuge der Umbenennung ein oder mehrere Attribute zum Tag setzen. Bin (wie manche vielleicht wissen) kein Scripter und ich finde keine Lösung!

Um Rückmeldung wäre ich (wie immer) äußerst Dankbar.

Gruß
Uli

P.s. gibt es im speziellen Schulungen oder online-Tutorials für das JavaScripting in InDesign?

(Dieser Beitrag wurde von Uli75 am 17. Jun 2019, 17:50 geändert)
X

XML-Tags vollständig löschen

Martin Fischer
  
Beiträge gesamt: 12089

17. Jun 2019, 18:30
Beitrag # 2 von 12
Beitrag ID: #570735
Bewertung:
(7026 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uli,

ich bin mir nicht ganz sicher, ob ich Dich richtig verstanden habe.

Aber hilft das?
(Bitte erst an einem Beispiel-Dokument testen!)
Code
app.activeDocument.xmlElements.firstItem().xmlElements.everyItem().untag();  
var root_tag = app.activeDocument.xmlElements.firstItem().markupTag;
for (var i = app.activeDocument.xmlTags.length-1; i >= 0; i--)
{
if (app.activeDocument.xmlTags.item(i) != root_tag)
app.activeDocument.xmlTags.item(i).remove(root_tag);
}


Das Schnipsel entfernt zunächst alle zugewiesenen Tags vom Text.
Danach löscht es alle Tags bis auf das Root-Tag.

Viele Grüße
Martin




als Antwort auf: [#570734]
(Dieser Beitrag wurde von Martin Fischer am 17. Jun 2019, 18:38 geändert)

XML-Tags vollständig löschen

Uli75
Beiträge gesamt: 33

18. Jun 2019, 08:47
Beitrag # 3 von 12
Beitrag ID: #570743
Bewertung:
(6977 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

das hat soweit prächtig funktioniert. Herzlichen Dank dafür!!!

Was ist wenn in dem gelieferten ID noch ein DTD hinterlegt ist. Könnte man das Script noch erweitern und dieses ebenso ersatzlos löschen?

Jetzt steh ich noch etwas auf dem Schlauch, was das hinzufügen von Attributen und Werten im ersten Skript (XMLTagUmbenennen.jsx) anbelangt. Wie weiß ich da was zu?

Gruß
Uli


als Antwort auf: [#570735]
(Dieser Beitrag wurde von Uli75 am 18. Jun 2019, 08:54 geändert)

XML-Tags vollständig löschen

Uli75
Beiträge gesamt: 33

18. Jun 2019, 12:57
Beitrag # 4 von 12
Beitrag ID: #570752
Bewertung:
(6937 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo nochmals,

habe das vorhin beschriebene Problem, was die DTDs angeht, gelöst. Wenn ich das DTD manuell aus der Struktur lösche, und dann das Bereinigungs-Script anwende, sind auch die Daten im Hintergrund gelöscht.

Bleibt nur noch eine Frage offen, wie ich im Zuge der Umbenennung noch Attribute hinzufügen kann.

Muchas gracias
Uli


als Antwort auf: [#570743]

XML-Tags vollständig löschen

Uli75
Beiträge gesamt: 33

18. Jun 2019, 15:19
Beitrag # 5 von 12
Beitrag ID: #570754
Bewertung:
(6913 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo nochmals,

vielleicht bin ich generell ja auf dem Holzweg mit dem Umbennen.

Es gibt ja bestimmt die Möglichkeit, alle Textrahmen mit einem Tag zu versehen und gleichzeitig ein Attribut mit entsprechendem Wert zu generieren.

Habe schon etliche Scripts ausgetestet, finde jedoch nur welche, mit denen entweder:
- der Text ausgewählt werden muss
- der Textrahmen nur ein Tag erhält jedoch ohne Attribute

Vielleicht findet sich jemand, der sowas schon mal gescriptet hat oder mit den nötigen Lösungsweg aufzeigen kann.

Gruß
Uli


als Antwort auf: [#570752]

XML-Tags vollständig löschen

Martin Fischer
  
Beiträge gesamt: 12089

18. Jun 2019, 16:21
Beitrag # 6 von 12
Beitrag ID: #570755
Bewertung:
(6899 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uli,

wirf mal einen Blick ins DOM: XMLAttributes.add()

Ein xmlAttribut fügst Du einem xmlElement hinzu:

Code
mein_xmlElement.xmlAttributes.add('mein_Attribut', 'mein_Inhalt'); 


Du brauchst also ein xmlElement, um ihm ein Attribut hinzuzufügen.

Angenommen, Du hast etwas ausgewählt, was getaggt ist, dann ginge das so:

Code
if (app.selection[0].associatedXMLElement != null) 
app.selection[0].associatedXMLElement.xmlAttributes.add('mein_Attribut', 'mein_Inhalt');


Viele Grüße
Martin




als Antwort auf: [#570754]
(Dieser Beitrag wurde von Martin Fischer am 18. Jun 2019, 16:22 geändert)

XML-Tags vollständig löschen

Uli75
Beiträge gesamt: 33

18. Jun 2019, 16:57
Beitrag # 7 von 12
Beitrag ID: #570756
Bewertung:
(6877 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi Martin,

das funktioniert ja tadellos! Merci dafür.

Aus der DOM werde ich nicht wirklich schlau, da kann mir wohl auch keiner helfen :-)

Angenommen:
Es müssen alle Textrahmen mit dem Tag A versehen und mit dem Attribut X werden. Wie stell ich das an?

Gruß
Uli

P.s. ich möchte jedoch keinen über die Maßen die Zeit klauen !!!


als Antwort auf: [#570755]

XML-Tags vollständig löschen

Martin Fischer
  
Beiträge gesamt: 12089

18. Jun 2019, 17:35
Beitrag # 8 von 12
Beitrag ID: #570757
Bewertung: |||
(6845 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Das folgende Schnipsel sollte zum Einen alle freistehenden Textrahmen (nicht verankert, nicht gruppiert, nicht in Tabellen ...) taggen (falls nicht bereits getaggt) und zum Anderen dem (ggf. neu) zugewiesenen xmlElement das xmlAttribut 'A' mit dem Wert '...' zuweisen.

Code
var doc = app.activeDocument;  
var xml_tag = (doc.xmlTags.itemByName('A').isValid) ? doc.xmlTags.itemByName('A') : doc.xmlTags.add({name:'A'});
var xml_element = null;

for (var i = doc.textFrames.length-1; i >= 0; i--)
{
if (doc.textFrames.item(i).associatedXMLElement != null)
{
// Textrahmen bereits getaggt
xml_element = doc.textFrames.item(i).associatedXMLElement;
}
else
{
// Textrahmen noch nicht getaggt
xml_element = doc.xmlElements.firstItem().xmlElements.add({markupTag: xml_tag});
doc.textFrames.item(i).markup(xml_element);
}
try
{
//Versuch, das angegebene xmlAttribut zuzuweisen
if (!doc.textFrames.item(i).associatedXMLElement.xmlAttributes.itemByName('X').isValid)
doc.textFrames.item(i).associatedXMLElement.xmlAttributes.add('X', '...');
}
catch(e)
{
// Zuweisung des xmlAttributs misslungen
$.writeln( e.message );
}
}


Viele Grüße
Martin




als Antwort auf: [#570756]
(Dieser Beitrag wurde von Martin Fischer am 18. Jun 2019, 17:54 geändert)

XML-Tags vollständig löschen

Uli75
Beiträge gesamt: 33

19. Jun 2019, 08:40
Beitrag # 9 von 12
Beitrag ID: #570760
Bewertung:
(6510 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen Martin,
TOP!!!!

Vielen Herzlichen Dank! Das ist genau das was ich brauche!

Jetzt nehm ich mir das Buch von Gregor Fellenz "InDesign automatisieren" und schau mir die Logik deines Scripts an.

Top, top, top… bin begeistert

Gruß
Uli


als Antwort auf: [#570757]

XML-Tags vollständig löschen

Martin Fischer
  
Beiträge gesamt: 12089

19. Jun 2019, 09:28
Beitrag # 10 von 12
Beitrag ID: #570762
Bewertung:
(6463 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen Uli,

vielen Dank für Deine Rückmeldung.

Wenn die obigen Beispiele dazu anspornen, Dich selbst in die Materie zu vertiefen – wozu das Buch von Gregor eine gute Grundlage bietet – dann hat sich diese Diskussion wirklich gelohnt.

Weitere interessante Quellen findest Du bei Peter Kahrel, dessen Skripte ich Dir besonders zum Studium und zur Orientierung empfehle: InDesign: JavaScript and GREP links and other useful resources.


Es freut mich, Dich von diesem »Virus« angesteckt zu sehen. Smile

Viele Grüße
Martin




als Antwort auf: [#570760]

XML-Tags vollständig löschen

Uli75
Beiträge gesamt: 33

24. Jun 2019, 10:34
Beitrag # 11 von 12
Beitrag ID: #570834
Bewertung:
(2188 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin nochmals,

bin wohl mit dem Virus infiziert, jedoch ist die Krankheit noch nicht ausgebrochen :-)

Jetzt, nach Rücksprache mit dem Kollegen, taucht die Frage auf, ob man nicht die vertaggung nur auf der entsperrten Ebene (immer die oberste) vornehmen kann und alle Textrahmen auf gesperrten Ebenen vernachlässigt.

Ich weiß zwar, dass ich die Ebene mit firstItem ansprechen kann, aber nicht die Elemente auf dieser.

Kann mir geholfen werden?


als Antwort auf: [#570762]

XML-Tags vollständig löschen

Uli75
Beiträge gesamt: 33

25. Jun 2019, 09:20
Beitrag # 12 von 12
Beitrag ID: #570845
Bewertung:
(2089 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten morgen zusammen!

Glaube bin auf der Zielgeraden!? Zumindest funktioniert es wie nachfolgend:

Code
//TagAttributZuTextrahmen.jsx 
//https://www.hilfdirselbst.ch/gforum/gforum.cgi?post=570757#570757

var doc = app.activeDocument;
var xml_tag = (doc.xmlTags.itemByName('PFBlock').isValid) ? doc.xmlTags.itemByName('PFBlock') : doc.xmlTags.add({name:'PFBlock'});
var xml_element = null;


for (var i = doc.layers.firstItem().textFrames.length-1; i >= 0; i--)
{

//wenn oberste Ebene gesperrt -> Stop
if (doc.layers.firstItem().locked == true)
{
alert("Die oberste Ebene ist gesperrt!");
exit();
} else {

if (doc.layers.firstItem().textFrames.item(i).associatedXMLElement != null)
{
// Textrahmen bereits getaggt
xml_element = doc.textFrames.item(i).associatedXMLElement;
}
else
{
// Textrahmen noch nicht getaggt
xml_element = doc.xmlElements.firstItem().xmlElements.add({markupTag: xml_tag});
doc.layers.firstItem().textFrames.item(i).markup(xml_element);
}
try
{
//Versuch, das angegebene xmlAttribut zuzuweisen
if (!doc.layers.firstItem().textFrames.item(i).associatedXMLElement.xmlAttributes.itemByName('settings').isValid)
doc.layers.firstItem().textFrames.item(i).associatedXMLElement.xmlAttributes.add('settings', // Anfuehrungen müssen \" auskommentiert und Zeilenschalter mittels \n erstellt werden
'{\n\"block-actions\":\"\",\n\"text-format\":\"\"\n}');
}
catch(e)
{
// Zuweisung des xmlAttributs misslungen
$.writeln( e.message );
}
}
}


Gruß
Uli


als Antwort auf: [#570834]
X
Hier Klicken

Aktuell

Quark / Adobe / Apple / Microsoft
einleitung_scharfzeichnen_300

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.

Veranstaltungen
21.08.2019

Affinity Photo, Affinity Designer und Affinity Publisher

Schulungsraum von pre2media – Dammstrasse 8, 8610 Uster
Mittwoch, 21. Aug. 2019, 09.00 - 17.00 Uhr

Referat

Alle reden davon – wir zeigen ihnen kompakt was in den einzelnen ­Programmen wirklich steckt. Sind die Programme von Affinity – bereits heute – eine Alternative zu den Adobe-Programmen? Was versteht ­Affinity unter StudioLink und der vollständigen Integration der Affinity-Apps. Sie können jedes Affinity-Referat einzeln buchen. Oder alle drei Referate zusammen, bequem an einem Tag.

Mittwoch, 21. August 2019
9.00 bis 11.00 Affinity Photo Bildbearbeitung CHF 90.00
13.00 bis 15.00 Affinity Designer Grafikdesign CHF 90.00
15.00 bis 17.00 Affinity Publisher Layoutprogramm CHF 90.00
Alle drei Affinity Programme zusammen (6 Lektionen) CHF 220.00

Diese Referate werden auch noch am Fr. 13. September und am Di. 22. Oktober 2019 durchgeführt.

Ja

Organisator: pre2media gmbh, Dammstrasse 8, 8610 Uster, info@pre2media.ch, www.pre2media.ch

Kontaktinformation: Peter Jäger oder Roger Thurnherr, E-Mailinfo AT pre2media DOT ch

https://www.pre2media.ch/-1/de/kurse/affinity-referat/

Affinity-Referat bei pre2media
Veranstaltungen
22.08.2019

Impressed GmbH, Hamburg
Donnerstag, 22. Aug. 2019, 10.00 - 10.30 Uhr

Webinar

Wir stellen Ihnen in diesem kostenlosen ca. halbstündigen Webinar das neue Enfocus Switch PDF Review Modul zur Freigabe von PDF-Druckdaten vor.

Ja

Organisator: Impressed GmbH

Kontaktinformation: Detlef Grimm, E-Mailschulungen AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=250

Enfocus Switch PDF Review Modul