[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt XML-Knoten und nextSibling

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

XML-Knoten und nextSibling

suchard
Beiträge gesamt: 19

7. Feb 2012, 19:15
Beitrag # 1 von 8
Bewertung:
(2824 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo liebes Forum.

Weiß jemand, wie es möglich ist,
auf einen Teil einer importierten XML-Struktur zuzugreifen?

Und zwar auf folgende Art und Weise:

Code
<doc> 
<p>Hallo Text, <i>ich bin mal kursiv</i> oder auch <b>fett oder <i>beides</i></f>
</p>
</doc>


Nach import der Struktur im ID-Dokument habe ich ja die Möglichkeit, mittels xmlItem oder xmlElement auf einen Knoten zuzugreifen, aber neines Wissens nicht auf z.B. den ersten Text Knoten.

Mein Ziel ist es aber nun, den Text-Knoten 'Hallo Text, ' und auch alle anderen Textknoten 'der Reihe nach' zu greifen, um auszuwerten, in welchem Element sie stehen um dann Formatierungen vorzunehmen. (nextSibling??)

Hintergrund ist, das ich den Text nicht mit Hilfe der Attribute aid:pstyle oder aid:cstyle formatieren kann, da der Content als Fussnotentext eingefügt werden soll.

Hat jmd. von euch Spezialisten einen Vorschlag für mich?

Vielen Dank und besten Gruß, Frank
X

XML-Knoten und nextSibling

Martin Fischer
  
Beiträge gesamt: 12685

7. Feb 2012, 19:52
Beitrag # 2 von 8
Beitrag ID: #489330
Bewertung:
(2811 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen


als Antwort auf: [#489326]

XML-Knoten und nextSibling

suchard
Beiträge gesamt: 19

7. Feb 2012, 20:27
Beitrag # 3 von 8
Beitrag ID: #489332
Bewertung:
(2794 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

auf die beiden Diskussionen bin ich zuvor gestoßen,
habe aber damit nicht das realisieren können, was ich wollte.
(Oder habe ich etwas übersehen?)

Wenn ich im Element <p> auf tests[0].contents zugreife, dann erhalte ich doch den gesamten Textstring aus dem Element, aber nicht den ersten Textknoten im Element <p>, sprich: 'Hallo Text, '.

Gruß


als Antwort auf: [#489330]

XML-Knoten und nextSibling

gfellenz
Beiträge gesamt: 120

7. Feb 2012, 20:57
Beitrag # 4 von 8
Beitrag ID: #489334
Bewertung:
(2779 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

auf die Textknoten kann man über das DOM nicht so einfach zugreifen.

Sobald du den Text in die Fußnote paltziersts verlierst du sowieso alle XML-Informationen. Von daher musst du vor der Umsetzung als Fußnote die Formatierung erledigen. Entweder wie vorgeschlagen über aid:pstyle oder über evaluateXPathExpression oder mit einer Schleife über die Elemente.


als Antwort auf: [#489332]

XML-Knoten und nextSibling

Martin Fischer
  
Beiträge gesamt: 12685

7. Feb 2012, 21:05
Beitrag # 5 von 8
Beitrag ID: #489335
Bewertung:
(2772 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Frank,

ehrlich gesagt, habe ich noch nicht so recht verstanden, auf was Du hinauswillst.

"Hallo Text" ist nicht getaggt. Wie möchtest Du es dann innerhalb der XML-Struktur fassen können?
Es ist Teil des xmlElements mit dem Inhalt "Hallo Text, <i>ich bin mal kursiv</i> oder auch <b>fett oder <i>beides</i></f>" – also das zwischen den <p>-Tags.

Das erste xmlElement innerhalt dieses xmlElements ist das mit dem Inhalt "ich bin mal kursiv"; das zweite "fett oder <i>beides</i>". Und das erste xmlElement vom zweiten ist "beides".

</f> ist vermutlich ein Tippfehler.

Was willst Du mit "Hallo Text, " anstellen?
Möchtest Du das nachträglich taggen?

Auf die Diskussionen oben habe ich verwiesen, weil ich mir erhoffte, dass Du Dir damit einen Weg durch den XML-Baum erschließt.


Den folgenden Satz habe ich noch nicht so richtig verstanden:
Zitat Hintergrund ist, das ich den Text nicht mit Hilfe der Attribute aid:pstyle oder aid:cstyle formatieren kann, da der Content als Fussnotentext eingefügt werden soll.


Willst Du aus dem Text mit einem bestimmten Tag Fußnoten generieren?
Die sind anschließend aber nicht mehr getaggt.
Kannst Du in Deinem Workflow in Kauf nehmen, dass die XML-Struktur verloren geht oder zumindest reduziert wird?
Spielt die XML-Struktur für Dich lediglich als Orientierung für die Formatierung eine Rolle oder brauchst Du die Struktur für einen Weg zurück (Export)?
Reicht dafür die Zuordnung von Formaten zu Tags nicht aus?


als Antwort auf: [#489332]

XML-Knoten und nextSibling

suchard
Beiträge gesamt: 19

7. Feb 2012, 22:14
Beitrag # 6 von 8
Beitrag ID: #489338
Bewertung:
(2743 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin, hallo Gregor,

ich fange mal anders an. Ich habe mich wahrscheinlich zu sehr auf das Problem selbst konzentriert als mein Vorhaben zu erläutern.

Das eigentiche Ziel ist das setzen von Fußnoten an der jew. Position im Text, an der sich ein Fußotenanker befindet.

Ich habe eine XML-Struktur, welche ich mit aid:pstyle/cstyle-Attributen versehen habe.
Nach dem Import habe ich die komplette XMl-Struktur im Dokument plaziert (über mehrere Seiten verkettete Textrahmen).

Am Ende der XML-Struktur befindet sich z.B. das Element <footnotes>, welches alle Fußnoten enthält <footnote id="1"><p>...</p></footnote> usw. (vorheriger XSLT-Skript plaziert alle im XML-Dokument vorhandenen Fußnoten am Ende der Struktur). Der Fussnotenanker im Text (also z.B.: <absatz><p><fn id="1"/> ...) bleibt bestehen und referenziert über einen eindeutigen id auf den Inhalt der Fußnote.
Das Elemente <footnotes> ist nicht mit im Dokument plaziert.

Nun glaube ich zu wissen, das es keine Möglichkeit gibt, für den XML-Import Elemente als Fußnoten zu kennzeichnen.

Also war meine Idee, mit JS durch die importierte Struktur zu fahren, alle <fn-Elemente zu greifen, dann in das gefundene Element <fn mit footnotes.add() eine wirkliche Fussnote zu erzeugen und dann den Inhalt einzufügen.

Und hier wollte ich nun durch alle Knoten fahren: (mein Beispielknoten aus dem ersten Post)
Element p: neuen Absatz erzeugen
Textknoten: 'Hallo Text, ':einfügen
Element i: 'ich bin mal kursiv' : Zeichenformatierung kursiv oder Zeichenformat anwenden, Text einfügen
Textknoten: 'oder auch ' einfügen, normalformatierung
Element b: 'fett oder ' formatierung fett, text einfügen
Textknoten: 'beides' : fett und krsiv formatieren

Wärend ich das so schreibe merke ich gerade, dass dieses Vorgehen wirklich recht kompliziert ist.

Ich habe im Vorfeld keine Möglichkeit gefunden, Textelemente aus der importierten Struktur in eine Fußnote zu plazieren, oder sollte ich nicht genug recherchiert haben?

Die XML-Struktur der Fußnoten muß nicht beibehalten werden.

Ich hoffe nun für mehr Klarheit gesorgt zu haben ;-)

Viele Grüße, Frank

PS
Antwort auf: </f> ist vermutlich ein Tippfehler.

Ja, das ist richtig:-)


als Antwort auf: [#489335]
(Dieser Beitrag wurde von suchard am 7. Feb 2012, 22:16 geändert)

XML-Knoten und nextSibling

Martin Fischer
  
Beiträge gesamt: 12685

8. Feb 2012, 08:09
Beitrag # 7 von 8
Beitrag ID: #489354
Bewertung:
(2682 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Frank,

wenn ich Dich nun richtig verstanden habe, dann ist das Hauptziel, die Fußnoten, welche als solche getaggt sind und am Ende eines Textabschnitts oder in einem eigenen Textabschnitt stehen, dort einzuarbeiten, wo der Verweis auf die jeweilige Fußnote ist.

Mich irritiert der Ansatz, den Du in der Passage beschrieben hast.
Zitat Element p: neuen Absatz erzeugen
Textknoten: 'Hallo Text, ':einfügen
Element i: 'ich bin mal kursiv' : Zeichenformatierung kursiv oder Zeichenformat anwenden, Text einfügen
Textknoten: 'oder auch ' einfügen, normalformatierung
Element b: 'fett oder ' formatierung fett, text einfügen
Textknoten: 'beides' : fett und kursiv formatieren


Ich kann darin nicht erkennen, was das mit den Fußnoten zu tun hat.


Mein Vorgehen wäre das folgende:
1. Formatierung des Textes (inklusive der Fußnoten) entsprechend der Tags mit Bordmitteln (Formate zu Tags zuordnen) oder mit einem separaten Skript.
2. Ermittlung der Position der Fußnotenverweise im Text.
3. Ermittlung der Fußnoten.
4. Zuordnung der Verweise zu den Fußnoten.
5. Erzeugung von neuen "InDesign"-Fußnoten im Text und Verschieben des Textes der Fußnoten, die diesen Fußnoten zugeordnet sind. Miteinhergehend Aufräumarbeiten.

Punkt 2 und 3 könntest Du über eine Erweiterung des Sammelskripts für XML-Elemente arrayOfXmlElements.jsx erledigen. Halte beim Einsammeln Fußnotenverweise und Fußnoten in zwei separaten Arrays fest. Am Ende sollten sich die Längen der beiden Arrays entsprechen (dieselbe Zahl an Elementen enthalten).

Anschließend wird in einer Schleife rückwärts durch den Verweis-Array die Position des jeweiligen Fußnotenverweises ermittelt, dort eine neue Fußnote erzeugt und schließlich der Fußnotentext (nicht das Element selbst), aus dem entsprechenden Element des Fußnotenarrays ans Ende der Fußnote verschoben (move()). Dabei wird ggf. eine überflüssige Absatzmarke am Ende der Fußnote gelöscht.

Es ist schon ein paar Jahre her (Juli 2009), da habe ich mir eben diese Schritte in einer Studie skizziert. Allerdings stehen hier die Fußnoten-Elemente bereits an der Stelle im Text, wo sie als InDesign-Fußnote eingearbeitet werden sollen – nicht wie bei Dir am Ende des Textabschnitts oder in einem eigenen Textabschnitt.

Du könntest das mal ansehen und prüfen, ob das – nach einem entsprechenden Umbau – für Dich funktioniert.
Code
#target InDesign 
var myDoc = app.documents[0];


var myXMLElements = new Array;

for (var b = 0; b <myDoc.xmlElements.firstItem().xmlElements.count(); b++)
getXML(myDoc.xmlElements.firstItem().xmlElements.item(b));

for ( var i = myXMLElements.length-1; i >= 0; i--)
{
if (myXMLElements[i].markupTag == myDoc.xmlTags.item('footnote'))
makeFootnote(myXMLElements[i]);
}

function makeFootnote(fnXMLElement)
{
var myNote = fnXMLElement.parentStory.insertionPoints.item(fnXMLElement.texts.firstItem().insertionPoints.lastItem().index +1).footnotes.add();
var myCharLength = myNote.characters.length;
fnXMLElement.texts.firstItem().move(LocationOptions.AT_END, myNote.texts.firstItem());
if (myNote.characters.lastItem().contents == '\r')
(myNote.characters.lastItem().contents = '')
if (myNote.characters.item(myCharLength).contents == '\r')
(myNote.characters.item(myCharLength).contents = '')
}

function getXML(aNode) {
for (var i = 0; i < aNode.xmlElements.count(); i++) {
myXMLElements.push(aNode.xmlElements.item(i));
getXML(aNode.xmlElements.item(i));
}
}

Man könnte das bestimmt besser strukturieren, aber mich hat damals in erster Linie das Vorgehen interessiert.

Ich hoffe nun, nicht komplett an Deiner Fragestellung vorbei geantwortet zu haben.


als Antwort auf: [#489338]
(Dieser Beitrag wurde von Martin Fischer am 8. Feb 2012, 08:14 geändert)

XML-Knoten und nextSibling

suchard
Beiträge gesamt: 19

8. Feb 2012, 09:03
Beitrag # 8 von 8
Beitrag ID: #489361
Bewertung:
(2660 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

wenn ich dich zu sehr verwirrt haben sollte, bitte ich um Entschuldigung. Es war nicht meine Absicht ;-)

Dein Vorschlag ist klasse, dass ist genau das was ich gesucht habe.

Ich habe sofort den Code gestestet. Selbst die Formatierung des Absatzes oder der Zeichen wird beibehalten.

Vielen Dank für die Mühe,
Gruß Frank


als Antwort auf: [#489354]
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, 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
01.03.2023 - 09.03.2023

Online
Mittwoch, 01. März 2023, 00.00 Uhr - Donnerstag, 09. März 2023, 00.00 Uhr

Online Webinar

Wie gehen wir mit diesen Veränderungen um? Was ist notwendig, damit wir die Digitalisierung im Unternehmen klappt? Veränderungsprozesse verstehen und entsprechend handeln Mitarbeiter als Botschafter Webseite mit WordPress erstellen SEA /SEO (Ads aufschalten)

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: B. Isik, E-Mailinfo AT snfa DOT ch

https://www.fernstudiumfitness.ch/digitalisierung-schweiz/