dominik_koenig
Returning Observer

DomElement asText mit line breaks

Ich habe gerade versucht den Content eines DomElement als Text auszugeben, also ohne HTML, aber mit normalen line breaks.

Das einfache ausgeben als Text funktioniert auch soweit mit:

domElement.toText(false)

Dabei gehen aber leider alle line breaks komplett verloren.

Jetzt wollte ich wenigstens eine halbwegs akzeptable Lösung hinbekommen, indem ich jedes Child Element des Root Elements als line break ansehe:

StringBuilder outputBuilder = new StringBuilder();

DefaultDomNode rootNode = domElement.getRoot();

Iterable<DomNode> childNodes = rootNode.getChildren();

for (DomNode childNode : childNodes) {

     outputBuilder.append(childNode.toText(false)).append("\n");

}

output = outputBuilder.toString();

Nur leider gibt es auf der DomNode Ebene keine toText() Methode, der mir die jeweilige sub Struktur als Text zurück liefert.

Der nächste Versuch wäre gewesen, einfach alle Children des DomElement zu entfernen, und das aktuell relevante Child zu lassen:

StringBuilder outputBuilder = new StringBuilder();

DefaultDomNode rootNode = domElement.getRoot();

Iterable<DomNode> childNodes = rootNode.getChildren();

for (DomNode childNode : childNodes) {

     rootNode.removeChild(childNode);

}

for (DomNode childNode : childNodes) {

     rootNode.appendChild(childNode);

     outputBuilder.append(domElement.toText(false)).append("\n");

     rootNode.removeChild(childNode);

}

output = outputBuilder.toString();

Aber leider gibt es auch hier eine Methode nicht und zwar die appendChild(DomNode)

Jetzt könnte man natürlich einen HTML parser einbinden und mit diesem das alles machen, aber würde mir ein wenig zu unsauber vorkommen.

Fällt vielleicht noch jemandem ein, wie man sowas realisieren könnte?

0 Kudos
1 Reply
felix_reinhold
Returning Responder

Hallo Dominik,

ich würde toText(true) nutzen und dann die Tags entfernen mit ein paar Regex-Ersetzungen.

So kannst du selbst entscheiden, welche Tags zu einem Linebreak führen. (br, li, p, hr, tr, ggf. div). Im Anschluss ersetzt du per Regex alle verbleibenden Tags und falls nötig HTML Entities.

Gruß

Felix

0 Kudos