Ich bin neu bei Jsoup und ich habe einige Schwierigkeiten mit der Arbeit mit Nicht-HTML-Elemente (Skripte). Ich habe folgende HTML:Preserve Nicht-HTML-Elemente mit jsoup parse
<$if not dcSnippet$>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="generator" content="Outside In HTML Converter version 8.4.0"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title></title>
</head>
<$endif$>
<div style="position:relative">
<p style="text-align: left; font-family: times; font-size: 10pt; font-weight: normal; font-style: normal; text-decoration: none"><span style="font-weight: normal; font-style: normal">This is a test document.</span></p>
</div>
<$if not dcSnippet$>
</body>
</html>
<$endif$>
Die Anwendung verwendet zum Anzeigen dieser weiß, was mit jenen < wenn dcSnippet $ > und etc. Aussagen zu tun. Wenn ich also den Text einfach mit jsoup analysiere, werden < und> codiert und der HTML-Code reorganisiert, so dass er nicht korrekt ausgeführt oder angezeigt wird. Wie so:
<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><$if not dcSnippet$>
<meta http-equiv="generator" content="Outside In HTML Converter version 8.4.0">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
<$endif$>
<div style="position:relative">
<p style="text-align: left; font-family: times; font-size: 10pt; font-weight: normal; font-style: normal; text-decoration: none"><span style="font-weight: normal; font-style: normal">This is a test document.</span></p>
</div>
<$if not dcSnippet$>
<$endif$>
</body></html>
hier Mein Endziel ist Ich möchte einige css und js hinzufügen enthält, und ändern Sie ein paar der Elementattribute. Das ist nicht wirklich ein Problem, ich habe so viel ausgearbeitet. Das Problem ist, ich weiß nicht, wie man die Nicht-HTML-Elemente erhält und die Formatierung an der gleichen Stelle wie das Original behält. Meine Lösung läuft so weit:
- Lesen Sie in der HTML-Datei, und durchlaufen Sie es, entfernen Sie die Zeilen mit den Nicht-HTML-Elementen.
- Erstellen Sie ein Dokument-Objekt mit dem reinen HTML
- meine Änderungen Make
- durch die HTML Gehen Sie zurück und wieder einsetzen Nicht-HTML-Elemente (Skripte), die ich zuerst entfernt.
- Speichern Sie das Dokument aus auf das Dateisystem
Das ist für jetzt, solange die Platzierung des Nicht-HTML ist vorhersehbar, und so weit es funktioniert. Aber ich möchte wissen, ob es einen besseren Weg gibt, dies zu tun, damit ich den HTML-Code nicht zuerst "säubern" muss, und dann manuell wieder einführen, was ich später entfernt habe. Hier ist der Kern meines Code (hoffentlich habe ich nicht zu viele Erklärungen verfehlen):
String newLine();
FileReader fr = new FileReader(inputFile);
BufferedReader br = new BufferedReader(fr);
while ((thisLine = br.readLine()) != null) {
if (thisLine.matches(".*<\\$if.*\\$>")) {
ifStatement = thisLine + "\n";
} else if (thisLine.matches(".*<\\$endif\\$>")) {
endifStatement = thisLine + "\n";
} else {
tempHtml += thisLine + "\n";
}
}
br.close();
Document doc = Jsoup.parse(tempHtml, "UTF-8");
doc.outputSettings().prettyPrint(false).escapeMode(EscapeMode.extended);
Element head = doc.head();
Element body = doc.body();
Element firstDiv = body.select("div").first();
[... perform my element and attribute inserts ...]
body.prependText("\n" + endifStatement);
body.appendText("\n" + ifStatement);
String fullHtml = (ifStatement + doc.toString().replaceAll("\\<", "<").replaceAll("\\>", ">") + "\n" + endifStatement);
BufferedWriter htmlWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFile), "UTF-8"));
htmlWriter.write(fullHtml);
htmlWriter.flush();
htmlWriter.close();
Vielen Dank für jede Hilfe oder Eingabe!
verstanden .. Danke, @stephan . In der Tat wird das Nicht-HTML-Material von einem Webservice zur Anzeige interpretiert. Ich wollte sicherstellen, dass ich nicht etwas Offensichtliches vermisste. Ich habe mich speziell an Jsoup gewandt, weil ich keinen benutzerdefinierten Parser schreiben wollte, also behalte ich meine aktuelle Lösung für den Moment und suche nach Änderungen in der Script-Platzierung (das Programm, das die Vorlage ausspuckt, ist eine Blackbox) . –