[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt InDesign CS5 XML Vergleich mit vorherigem Element

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

InDesign CS5 XML Vergleich mit vorherigem Element

JonesRidder
Beiträge gesamt: 85

26. Apr 2011, 10:49
Beitrag # 1 von 10
Bewertung:
(3578 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ich möchte folgendes in Code ausdrücken:
"Wenn der aktuelle Datensatz XML-Element <Rubrik> nicht dem vorherigen Datensatz XML-Element <Rubrik> entspricht, dann mache das ....
wenn nicht, dann geh weiter im Code (kein else Zweig also)".

Mein XML Aufbau:
Code
<dataroot> 
<Artikel><Rubrik>TestRubrik1</Rubrik>...</Artikel>
<Artikel><Rubrik>TestRubrik2</Rubrik>...</Artikel>
<Artikel><Rubrik>TestRubrik3</Rubrik>...</Artikel>
<Artikel><Rubrik>TestRubrik3</Rubrik>...</Artikel>
...
</dataroot>


Mein Codeschnipsel dafür:
Code
var _dok = app.activeDocument; 
var _root = _dok.xmlElements[0];
var _artikel = _root.xmlElements[i];
//....
if (_artikel.xmlElements[i].xmlElements.itemByName("Rubrik") != _artikel.xmlElements[i--].xmlElements.itemByName("Rubrik")) {
} //...



Weiß einer wie ich das hinbekomme?
Erläuterungen: "i--" soll - so dachte ich mir - "den vorherigen Datensatz" darstellen. Ist das so richtig?

Gruß
J.R.
X

InDesign CS5 XML Vergleich mit vorherigem Element

Martin Fischer
  
Beiträge gesamt: 12783

26. Apr 2011, 11:20
Beitrag # 2 von 10
Beitrag ID: #469856
Bewertung:
(3566 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
i-- setzt den Zähler um 1 zurück.
Das kann im ersten Moment zwar den gewünschten Effekt herbeiführen.
Allerdings kann das die weitere Ausführung der Schleife stören.

Verwende statt dessen i-1.
Das beläßt den Zähler unverändert.

Statt dem XML-Element solltest Du vielleicht eine bestimmte Eigenschaft (oder mehrere), in der die verglichenen XML-Elemente unterscheiden bzw. nicht unterscheiden sollen, spezifizieren.
Denn in einer Eigenschaft sind die XML-Elemente immer unterschiedlich: in der id. Deswegen wirst Du beim direkten Vergleich von zwei XML-Elementen nie eine eindeutige Übereinstimmung bekommen.


als Antwort auf: [#469854]
(Dieser Beitrag wurde von Martin Fischer am 26. Apr 2011, 11:21 geändert)

InDesign CS5 XML Vergleich mit vorherigem Element

JonesRidder
Beiträge gesamt: 85

26. Apr 2011, 11:59
Beitrag # 3 von 10
Beitrag ID: #469859
Bewertung:
(3552 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat i-- setzt den Zähler um 1 zurück.
Das kann im ersten Moment zwar den gewünschten Effekt herbeiführen.
Allerdings kann das die weitere Ausführung der Schleife stören.

Verwende statt dessen i-1.
Das beläßt den Zähler unverändert.

OK - gemacht.

Zitat Statt dem XML-Element solltest Du vielleicht eine bestimmte Eigenschaft (oder mehrere), in der die verglichenen XML-Elemente unterscheiden bzw. nicht unterscheiden sollen, spezifizieren.
Denn in einer Eigenschaft sind die XML-Elemente immer unterschiedlich: in der id. Deswegen wirst Du beim direkten Vergleich von zwei XML-Elementen nie eine eindeutige Übereinstimmung bekommen.

Die ID ist soweit ich weiß immer unterschiedlich. D.h. Wenn ich den Fall habe, dass zwei Artikel Elemente die selbe Rubrik haben, ist Rubrik1 ungleich Rubrik2 (obwhol beide den Inhalt "TestRubrik1" haben und somit - für meine Zwecke - gleich sind).

Wenn folgender Fall zutrifft:
Code
<dataroot> 
<Artikel><Rubrik>TestRubrik1</Rubrik>...</Artikel>
<Artikel><Rubrik>TestRubrik2</Rubrik>...</Artikel>
<Artikel><Rubrik>TestRubrik3</Rubrik>...</Artikel>
<Artikel><Rubrik>TestRubrik3</Rubrik>...</Artikel>
...
</dataroot>

... dann ist es eindeutig, dass das
zweite Artikel Element ungleich dem ersten Artikel Element ist, das dritte ungleich dem zweiten
und das vierte gleich dem dritten ist.

Ich vermute, dass meine Syntax nicht stimmt.
Wenn ich nämlich folgende CodeZeile ins IF einfüge {HIER} (um zu testen, was das Programm zum Vergleich überhaupt heranzieht) ...
Code
alert (_artikel.xmlElements[i].xmlElements.itemByName("Rubrik")); 
alert (_artikel.xmlElements[i-1].xmlElements.itemByName("Rubrik"));

... dann gibt er mir in der MsgBox nicht den Inhalt des jeweiligen XML Tags Rubrik aus sondern "[object XMLElement]".


als Antwort auf: [#469856]

InDesign CS5 XML Vergleich mit vorherigem Element

Martin Fischer
  
Beiträge gesamt: 12783

26. Apr 2011, 12:22
Beitrag # 4 von 10
Beitrag ID: #469862
Bewertung:
(3545 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Verwende für den Inhalt eines XML-Elements die contents-property.

Code
alert (_artikel.xmlElements[i].xmlElements.itemByName("Rubrik").contents);  
alert (_artikel.xmlElements[i-1].xmlElements.itemByName("Rubrik").contents);



Der Inhalt (contents) ist nur eine von vielen Eigenschaften eines XML-Elements.


als Antwort auf: [#469859]
(Dieser Beitrag wurde von Martin Fischer am 26. Apr 2011, 13:35 geändert)

InDesign CS5 XML Vergleich mit vorherigem Element

JonesRidder
Beiträge gesamt: 85

26. Apr 2011, 15:01
Beitrag # 5 von 10
Beitrag ID: #469871
Bewertung:
(3497 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Das mit CONTENTS funktioniert - danke für den Tipp.

Das ...
Code
if (_root.xmlElements[i].xmlElements.itemByName("Rubrik") != _root.xmlElements[i-1].xmlElements.itemByName("Rubrik")) 
{ alert (_root.xmlElements[i-1].xmlElements.itemByName("Rubrik").contents + " NEXT " + _root.xmlElements[i].xmlElements.itemByName("Rubrik").contents); }

(wie du versucht hast mich vorher drüber aufzuklären) scheint nicht zu funktionieren. Die MsgBox erscheint auch dann, wenn zwei aufeinanderfolgende XML Elemente den selben Inhalt haben (Ausgabe dann: "TestRubrik1 NEXT TestRubrik1"). Folglich sind also alle Elemente, auch wenn sie den selben Namen und Inhalt haben immer ungleich.

Wie kann ich denn jetzt unterscheiden zwischen verschiedenen Inhalten eines XML Elements mit selben Namen?
Über die ID (woher ich die auch immer kriegen soll?) würde es auch nicht gehen, weil diese ja IMMER unterschiedlich ist und es ja Fälle gibt, in denen sich Rubriken mit gleichen Namen wiederholen. Oder ist es etwa so, dass in solch einem Fall:

Code
  ... 
<Artikel><Rubrik>TestRubrik3</Rubrik>...</Artikel>
<Artikel><Rubrik>TestRubrik3</Rubrik>...</Artikel> ...

beide Elemente <Rubrik> (sowohl obere als auch untere -1. und 2.) die selbe ID bekommen, weil sie den selben Inhalt haben??

Gruß
J.R.


als Antwort auf: [#469862]

InDesign CS5 XML Vergleich mit vorherigem Element

Martin Fischer
  
Beiträge gesamt: 12783

26. Apr 2011, 15:19
Beitrag # 6 von 10
Beitrag ID: #469874
Bewertung:
(3488 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Wie kann ich denn jetzt unterscheiden zwischen verschiedenen Inhalten eines XML Elements mit selben Namen?


Du darfst nicht die XML-Elemente miteinander vergleichen, sondern musst die Inhalte (contents) der XML-Elemente (oder andere Eigenschaften wie texts ...) vergleichen.
Code
if (_root.xmlElements[i].xmlElements.itemByName("Rubrik").contents != _root.xmlElements[i-1].xmlElements.itemByName("Rubrik").contents) 


Nein, zwei Objekte können sich nicht eine ID teilen.
Auch wenn sie in allen anderen Eigenschaften übereinstimmen.
Es gibt keine eineiigen Zwillinge.

Es ist eine grundlegende Aufgabe der ID, Objekte, die in allen anderen Eigenschaften miteinander übereinstimmen, voneinander zu unterschieden.


als Antwort auf: [#469871]
(Dieser Beitrag wurde von Martin Fischer am 26. Apr 2011, 15:20 geändert)

InDesign CS5 XML Vergleich mit vorherigem Element

WernerPerplies
Beiträge gesamt: 2762

26. Apr 2011, 16:18
Beitrag # 7 von 10
Beitrag ID: #469881
Bewertung:
(3463 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo J.R.

jetzt mal ganz unabhängig von JavaScript und InDesign:

Wie Dir Martin schon sagt, Du must Inhalte vergleichen.

Die einzelnen XML-Elemente werden intern als Objekt verwaltet und sind nur dann gleich, wenn ihre (interne Adresse -> Referenz) identisch ist.

Damit wäre auch zwei XML-Elemente mit gleicher ID und kompletten gleichem Inhalt unterschiedlich, wenn sie intern eine unterschiedliche Adresse hätten.

Um ein XML-Element komplett mit einem zweiten Element zu vergleichen, müsstest Du jedes enthaltene Element mit dem entsprechenden Element im anderen Element vergleichen.

Das würde natürlich hier wieder zur Ungleichheit führen, da bei Dir Elemente mit unterschiedlicher ID aber ansonsten gleichem Inhalt bei einem vollständigen Vergleich ungleich werden. Deshalb musst Du die ID beim Vergleich ausklammern.

Dein Vergleich müsste in etwas so aussehen:

bool Vergleich(XML-Element1, XML-Element2)
{
if (XML-Element1.name != XML-Element2.name) return false;
if (XML-Element1.Attributes.Count != XML-Element2.Attributes.Count) return false;
if (XML-Element1.AlleAttributeOhneID != XML-Element2.AlleAttributeOhneID!) return false;
if (XML-Element1.Childs.Count != XML-Element2.Childs.Count) return false;
for(jedes Child in XML-Element1 und jedes Child in XML-Element2) -> if (!(Vergleich(ChildOfElement1, ChildElement2)return false))
if (XML-Element1.content != XML-Element2.content) return false;
return true;
}

Weiteres Problem: die Reihenfolge der Childs und/oder Attribute könnte unterschiedlich sein und trotzdem könnte ein Element gleich sein.

Falls so etwas vorkommen sollte, müssten die Childs/Attribute vor dem Vergleich sortiert werden.

Für eine vollständige Lösung müssten natürlich noch weitere Elemente (Kommentare, Whitespaces ...) berücksichtigt werden.

So, ich hoffe, mein Pseudo-Code ist einigermaßen verständlich.

Wenn ja, solltest Du die Logik in die von Dir gewünschte Sprache übertragbar sein.


als Antwort auf: [#469871]
(Dieser Beitrag wurde von WernerPerplies am 26. Apr 2011, 16:30 geändert)

InDesign CS5 XML Vergleich mit vorherigem Element

Dirk Becker
Beiträge gesamt: 193

26. Apr 2011, 22:31
Beitrag # 8 von 10
Beitrag ID: #469908
Bewertung:
(3435 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Die ID von XML Elementen (der Wert von myXMLElement.id) ist nur innerhalb der parentStory eindeutig, also pro Kette von Rahmen. XMLElement ist damit eine große Ausnahme im InDesign Objektmodell.

So kann es, wie von Werner beschrieben, tatsächlich zu unterschiedlichen Elementen mit gleicher ID kommen.

Dirk


als Antwort auf: [#469881]

InDesign CS5 XML Vergleich mit vorherigem Element

Martin Fischer
  
Beiträge gesamt: 12783

27. Apr 2011, 08:37
Beitrag # 9 von 10
Beitrag ID: #469923
Bewertung:
(3411 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ Dirk Becker ] Die ID von XML Elementen (der Wert von myXMLElement.id) ist nur innerhalb der parentStory eindeutig, also pro Kette von Rahmen.


Ja, meine Behauptung, es könne in einem Dokument keine XML-Elemente mit identischer ID geben, ist falsch.

Ich hatte bei meinen Überlegungen außer Acht gelassen, dass der Fragesteller möglicherweise mit mehr als einem Textabschnitt arbeitet. Zudem hatte ich den Fokus zu sehr auf den Vergleich unmittelbar benachbarter XML-Elemente (aufeinander folgende) gerichtet.

Für die Lösung des angesprochenen Problems hatte ich den Weg der Herbeiführung von XML-Elementen mit gleicher ID, wenn sie in allen anderen Eigenschaften übereinstimmen, für nicht erfolgversprechend betrachtet. Was wäre damit gewonnen, wenn auf dem Weg dahin ohnehin ein Vergleich aller anderen Eigenschaften nötig wäre?

Meine Intention war, den Blick auf den Vergleich einer Auswahl von Eigenschaften zu richten.
Wann gelten im Hinblick auf die Aufgabenstellung zwei aufeinanderfolgende XML-Elemente als gleich?
a) Genau dann, wenn sie in allen Eigenschaften miteinander übereinstimmen (die ID eingeschlossen oder ausgeschlossen)?
b) Ist es hinreichend, wenn sie in einer oder wenigen Eigenschaft(en) (z.B. contents) übereinstimmen?

Darüberhinaus sollte geklärt werden, ob es genügt, die/einige Eigenschaften unmittelbar aufeinander folgender XML-Elemente (i : i-1) zu vergleichen oder ob jedes XML-Element mit jedem anderen verglichen werden muss.
Das hängt u.a. von der Anlage der Daten ab.
Möglicherweise interessiert es die Aufgabenstellung nicht, ob das 2. XML-Element mit den relevanten Eigenschaften des 200. XML-Elements übereinstimmt, wenn mindestens ein XML-Element mit einer Abweichung in den relevanten Eigenschaften dazwischenliegt.
Oder eine solche Übereinstimmung kann von der Erzeugung der Daten her ausgeschlossen werden ...


als Antwort auf: [#469908]
(Dieser Beitrag wurde von Martin Fischer am 27. Apr 2011, 09:04 geändert)

InDesign CS5 XML Vergleich mit vorherigem Element

JonesRidder
Beiträge gesamt: 85

28. Apr 2011, 09:00
Beitrag # 10 von 10
Beitrag ID: #470031
Bewertung:
(3370 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Problem gelöst!
Vielen Dank an die Experten Martin Fischer und Dirk Becker!
Für meine Problestellung hat der Hinweis von Martin Fischer (Beitrag ID: #469874), dass ich ".contents" anwenden soll im Vergleich, ausgereicht.
Gruß
J.R.


als Antwort auf: [#469923]
(Dieser Beitrag wurde von JonesRidder am 28. Apr 2011, 09:07 geändert)
X

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
14.05.2024

Online
Dienstag, 14. Mai 2024, 10.00 - 10.30 Uhr

Webinar

Prozessoptimierung ist ein Teamsport! Keine Software und keine Maschine allein kann Ihnen helfen, die Effizienzpotenziale Ihres Betriebes maximal auszuschöpfen. Von der Auftragsannahme über die Vorstufe und den Druck bis hin zur Weiterverarbeitung – alles muss optimal ineinandergreifen. Apropos Weiterverarbeitung – in vielen Druckbetrieben fristet sie in Sachen Prozessoptimierung immer noch ein Schattendasein. Dabei liegen hier mittlerweile die größten Einsparpotenziale! In einem Webinar von Horizon und Impressed erfahren Sie, wie Sie diese Einsparungen realisieren können. Horizon, bekannt für innovative Lösungen in der Druckweiterverarbeitung, bietet mit iCE LiNK eine Workflowlösung für die Weiterverarbeitung. iCE LiNK überwacht, visualisiert und analysiert Produktionsabläufe und unterstützt bei der Wartung – damit immer alles reibungslos läuft. Den gleichen Anspruch hat der von Impressed entwickelte Impressed Workflow Server – er ist die smarte PDF-Workflow-Lösung für Druckereien, die Datenmanagement, Preflight und Produktionssteuerung übernimmt. Im Webinar zeigen Ihnen die Experten von Horizon und Impressed, wie beide Lösungen im Team die Effizienz und Produktivität Ihres Betriebes steigern können. 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 / Horizon

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

Einsparpotenziale in der Weiterverarbeitung
Veranstaltungen
16.05.2024

Online
Donnerstag, 16. Mai 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

Nein

Organisator: Impressed / Günther Business Solutions

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

Und es geht doch: Automatisierung im Großformatdruck!