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.
Einen schönen Tag wünscht
Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign Aktuelles (Stand: 14.02.2024) Kundenstimmen