Я новичок в jsoup, и мне сложно работать с не-HTML-элементами (скриптами). У меня есть следующий HTML:Сохранять не-HTML-элементы с помощью 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$>
Приложение используется для отображения этого знает, что делать с теми, < если dcSnippet $ > и отчетности и т.д.. Поэтому, когда я просто разбираю текст с помощью jsoup, кодируются < и> и html реорганизуется, поэтому он не выполняется или не отображается должным образом. Как так:
<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>
Моя конечная цель здесь я хочу добавить некоторые CSS и JS включает в себя, и изменить несколько атрибутов элемента. На самом деле это не проблема, я так много разобрался. Проблема в том, что я не знаю, как сохранить не-HTML-элементы и сохранить форматирование в том же месте, что и оригинал. Мое решение до сих пор выглядит следующим образом:
- Прочитайте в файле HTML и выполните итерацию по нему, удалив строки с помощью элементов, отличных от HTML.
- Создание объекта документа с чистым HTML
- сделать мои изменения
- Вернитесь через HTML и повторно вставить не-HTML элементы (скрипты), которые я снял первый.
- Сохранить документ к файловой системе
Это работает в настоящее время, до тех пор, как размещение не-HTML является предсказуемым, и до сих пор это. Но я хочу знать, есть ли лучший способ сделать это, поэтому мне не нужно сначала «очищать» HTML, а затем вручную повторно вводить то, что я удалял позже. Вот суть моего кода (надеюсь, я не пропускал слишком много заявлений):
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();
спасибо за любую помощь или вход!
Понял .. Спасибо, @stephan , В самом деле, не-HTML-материал там интерпретируется веб-сервисом для отображения. Я хотел убедиться, что у меня не хватает чего-то очевидного. Я обратился к Jsoup специально, потому что я не хотел писать собственный парсер, поэтому сейчас я просто оставлю свое текущее решение и буду искать изменения в размещении сценариев (программа, выплевывающая шаблон, является черным ящиком) , –