Bookmark HTML Datei einlesen, alle Links erhalten und manche editieren..? (aktuell JSoup)

sirbender

Top Contributor
Ich habe mit dem Brave-Browser meine Bookmarks als bookmarks.html ausgeschrieben. Diese dient als Inhalt für JSoup.

Ich hatte das Programm eigentlich schon fertig und das Editieren bestimmter HREF Urls klappte, aber als ich es dann wieder in Brave importieren wollte, importiere es die Ordner samt aller Links nicht.

Das Problem war aber nicht mein Code, sondern JSoup schreibt ohne irgendwelche Änderungen zumindest für Brave unverständlichen HTML code aus:

Document document = Jsoup.parse(input);
Files.write(output, document.outerHtml().getBytes());

Weiss jemand wie ich JSoup dazu bringen kann kompatiblen Code auszuschreiben, oder kann mir jemand eine nicht so invasive Alternative zu JSoup vorschlagen, welche Bookmark.html editieren kann und dessen Output die Browser auch wieder fehlerfrei importieren.
 
Kannst Du denn die Details liefern? Was stimmt denn nicht? Wie sieht die original bookmarks.html aus und wie die, die du wieder schreibst? Was sind die Unterschiede, die Probleme machen?

Dann könnte man ggf. Ideen liefern.
 
Naja, JSoup modifiziert halt den HTML code. Fuegt zum Beispiel direkt </DT> hinzu, wo beim Original keiner war. Beim Original fehlen die schliessenden </DT>.

<DT><A HREF= </A></DT>

Wahrscheinlich gibt es noch viele solche Sachen. Schliessende </p> usw.

Auch </head><body> fehlt gänzlich beim Original. Das wird hinzugefügt von JSoup. Woran es jetzt genau liegt, dass der Import kaputt geht weiss ich nicht. Wobei das mit </head><body> ist mir erst jetzt aufgefallen. Ich muss mal schauen ob ich JSoup überreden kann das irgendwie "RAW" auszuschreiben.
 
Keine Ahnung, wo ich das mal gefunden hab, funktioniert aber recht zuverlässig.
Nachbearbeitung ist da natürlich nicht vorgesehen.

Java:
    public static synchronized Set<HtmlLink> getAllLinksFrom(String content) {
        Set<HtmlLink> result = new LinkedHashSet<>();
        if (content.isEmpty()) {
            return result;
        }
        Matcher matcherTag = patternTag.matcher(content);
        while (matcherTag.find()) {
            String href = matcherTag.group(1); // href
            String linkText = matcherTag.group(2); // link text
            Matcher matcherLink = patternLink.matcher(href);
            while (matcherLink.find()) {
                String link = matcherLink.group(1); // link
                boolean startsEnclosed = link.startsWith("\"");
                boolean endsEnclosed = link.startsWith("\"");
                if (startsEnclosed || endsEnclosed) {
                    link = link.substring(startsEnclosed ? 1 : 0, endsEnclosed ? link.length() - 1 : link.length());
                }
                result.add(new HtmlLink(link, linkText));
            }
        }
        return result;
    }
    private final static Pattern patternTag = Pattern.compile("(?i)<a([^>]+)>(.+?)</a>");
    private final static Pattern patternLink = Pattern.compile("\\s*(?i)href\\s*=\\s*(\"([^\"]*\")|'[^']*'|([^'\">\\s]+))");

    private record HtmlLink(String link, String linkText) {
        
    }
 

Zurück
Oben