tzumtobel
Occasional Observer

Search and Replace Script CMS_INPUT_DOM

Jump to solution

Hallo zusammen,

ich bin gerade dabei ein Script zu schreiben, welches dem Redakteur ermöglicht zwei Strings einzugeben, welche dann anschließend für ein Search & Replace verwendet werden.

Ich durchsuche rekursiv alle Kind-Elemente des Elements, auf dem der Redakteur das Script gestartet hat und möchte dort innerhalb des Contents nach dem Search String suchen und mit dem Replace String ersetzen.

Bei "einfachen" CMS_INPUT_TEXT-Feldern ist das auch kein Thema. Ich bin allerdings nun an der Stelle, wo ich ein CMS_INPUT_DOM-Feld habe..

Meine "replace"-Funktion bekommt ein FormField übergeben.

Bisher habe ich folgendes:

Object fieldVal = field.get();

if(fieldVal instanceof String) {

     ...
} else if(fieldVal instanceof DomElement) {
   if(!field.isEmpty()) {

DefaultDomNode root = ((DomElement) fieldVal).getRoot();
Iterable<DomNode> children;
children = root.getChildren(true);

for(DomNode child : children) {
   FormatTemplate formatTemplate = child.getFormatTemplate();

               DomNodeType nodeType = child.getNodeType();

               if(nodeType.equals(DomNodeType.TEXT)) {

                    TextDomNode tempNode = (TextDomNode) child;

                    String nodeTextContent = tempNode.getText();

               }

        }

     }

}

Ich müsste nun in jedem Kind-Element den Text extrahieren und nach meinem "Search"-String suchen. Wenn etwas gefunden wurde, muss der Text mit meinem "Replace"-String ersetzt werden.

Anschließend muss dann das ursprüngliche Element entfernt werden und ein neues (mit dem replaced Text) an dessen Stelle platziert werden (replaceChild() ?).

Ist das der richtige Ansatz? Falls jemand andere Lösungsvorschläge hat, bitte gerne posten Smiley Happy


0 Kudos
1 Solution

Accepted Solutions

Ich habe es nun geschafft, meine Änderungen an den Kindelementen innerhalb des Dom-Feldes zu persistieren.

Innerhalb des Loops war folgende Zeile die Lösung:

     child.getParent().replaceChild(child, replaced);

Wobei "replaced" ein String war, welcher meinen geänderten Text nach dem Ersetzen enthielt.

View solution in original post

0 Kudos
2 Replies
tzumtobel
Occasional Observer

Kann mir jemand sagen, wie die Nutzung der DomNode.replaceChild(DomNode var1, String var2) gedacht ist? Das ist gerade die Stelle, an der ich konkret nicht weiter komme.

Welcher String wird hier übergeben bzw. sollte übergeben werden?

Ich bin davon ausgegangen, ich übergebe die zu ersetzende Node und die Node, mit der ich ersetzen möchte.

LG

0 Kudos

Ich habe es nun geschafft, meine Änderungen an den Kindelementen innerhalb des Dom-Feldes zu persistieren.

Innerhalb des Loops war folgende Zeile die Lösung:

     child.getParent().replaceChild(child, replaced);

Wobei "replaced" ein String war, welcher meinen geänderten Text nach dem Ersetzen enthielt.

0 Kudos