[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: 54

17. Jun 2019, 17:49
Beitrag # 1 von 12
Bewertung:
(12467 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: 12783

17. Jun 2019, 18:30
Beitrag # 2 von 12
Beitrag ID: #570735
Bewertung:
(12456 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.


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: 54

18. Jun 2019, 08:47
Beitrag # 3 von 12
Beitrag ID: #570743
Bewertung:
(12407 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: 54

18. Jun 2019, 12:57
Beitrag # 4 von 12
Beitrag ID: #570752
Bewertung:
(12367 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: 54

18. Jun 2019, 15:19
Beitrag # 5 von 12
Beitrag ID: #570754
Bewertung:
(12343 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: 12783

18. Jun 2019, 16:21
Beitrag # 6 von 12
Beitrag ID: #570755
Bewertung:
(12329 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');



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: 54

18. Jun 2019, 16:57
Beitrag # 7 von 12
Beitrag ID: #570756
Bewertung:
(12307 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: 12783

18. Jun 2019, 17:35
Beitrag # 8 von 12
Beitrag ID: #570757
Bewertung: |||
(12275 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 );
}
}



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: 54

19. Jun 2019, 08:40
Beitrag # 9 von 12
Beitrag ID: #570760
Bewertung:
(11940 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: 12783

19. Jun 2019, 09:28
Beitrag # 10 von 12
Beitrag ID: #570762
Bewertung:
(11893 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


als Antwort auf: [#570760]

XML-Tags vollständig löschen

Uli75
Beiträge gesamt: 54

24. Jun 2019, 10:34
Beitrag # 11 von 12
Beitrag ID: #570834
Bewertung:
(7618 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: 54

25. Jun 2019, 09:20
Beitrag # 12 von 12
Beitrag ID: #570845
Bewertung:
(7519 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

Aktuell

Web / SEO / Blockchain / Betriebssystem
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 hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
17.04.2024

Online
Mittwoch, 17. Apr. 2024, 10.00 - 10.30 Uhr

Webinar

Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Günther Business Solutions und Impressed treten in einem Webinar den Gegenbeweis an. Experten beider Unternehmen zeigen, wie Großformatdrucker vom Einsatz zweier bewährter Lösungen profitieren können: • von advanter print+sign von Günther Business Solutions, dem ERP-System für den Großformatdruck, dass alle Phasen der Wertschöpfung im Large Format Printing abdeckt • von Impressed Workflow Server, der smarten PDF-Workflow-Lösung für Druckereien, die Datenmanagement, Preflight und Produktionssteuerung übernimmt Über die Kombination beider Lösungen können Großformatdrucker ihre Prozesse mit modernen Workflows Schritt für Schritt automatisieren – und so zügig deutliche Zeit- und Kosteneinsparungen realisieren. Das Webinar sollten Sie sich nicht entgehen lassen – damit Sie keine Effizienzpotenziale mehr liegen lassen. Melden Sie sich am besten gleich an, wir freuen uns auf Sie! PS: Melden Sie sich in jedem Fall an – sollten Sie zum Termin verhindert sein, erhalten Sie die Aufzeichnung.

kostenlos

Ja

Organisator: Impressed / Günther Business Solutions

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

Und es geht doch: Automatisierung im Großformatdruck!