Questions & Answers

SOLVED
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

Type a product name