[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:
(6681 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)
Hier Klicken X

XML-Tags vollständig löschen

Martin Fischer
  
Beiträge gesamt: 12080

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

18. Jun 2019, 16:21
Beitrag # 6 von 12
Beitrag ID: #570755
Bewertung:
(6544 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:
(6522 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: 12080

18. Jun 2019, 17:35
Beitrag # 8 von 12
Beitrag ID: #570757
Bewertung: |||
(6490 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:
(6155 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: 12080

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

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, etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen. pdf-icon Hier eine kleine Anleitung.

Veranstaltungen
18.07.2019

München
Donnerstag, 18. Juli 2019, 12.44 Uhr

Infotag

Bereits zum 2. Mal kommen auch in diesem Jahr Experten zum Infotag in München zusammen, um sich zu Themen rund um das richtige Planen und Erstellen von barrierefreien PDF-Inhalten und Webseiten auszutauschen. Hierbei spielt die Berücksichtigung gesetzlicher Anforderungen eine ebenso große Rolle, wie das Erstellen selbst. U.a. wird axaio software, zusammen mit seinem Partner Klaas Posselt von einmanncombo, vor Ort sein, um sein Wissen zum Generieren barrierefreier PDFs aus Adobe InDesign mit den Teilnehmern zu teilen. Schauen Sie in die Agenda, um mehr über weitere Referenten und Themen zu erfahren!

18.07.2019, 10 Uhr – 16:30 Uhr (Einlass ab 09:30 Uhr)
Preis: 199,00 €/brutto (inkl. Verpflegung)

Ja

Organisator: cmt Training

Kontaktinformation: E-Mailinfo AT cmt DOT de

https://www.cmt.de/Barrierefreiheit/Barrierefreiheit-Digital/2-Infotag-Barrierefreie-Webseiten-und-PDF-Dokumente-3946.html

2. Infotag: Barrierefreie Webseiten & PDF Dokumente
Veranstaltungen
17.08.2019 - 07.03.2020

3400 Burgdorf, BE
Samstag, 17. Aug. 2019, 08.30 Uhr - Samstag, 07. März 2020, 08.30 Uhr

Lehrgang

Absolventen/innen der Qualifikation Publisher Professional – Profil «Gestaltung» verfügen über Kompetenzen, welche ihnen gestatten, Projekte und Aufgaben der gestalterischen Umsetzung der Medienproduktion mit dem Einsatz der üblichen Publishing-Programme selbständig in Betrieben oder Organisationen zu übernehmen.

Ja

Organisator: PubliCollege GmbH

Kontaktinformation: Beat Kipfer, E-Mailinfo AT publicollege DOT ch

www.publicollege.ch

Publisher Professional-Profil Gestaltung