我是jsoup的新手,我在使用非HTML元素(腳本)時遇到了一些困難。我有以下HTML:用jsoup解析保留非HTML元素
<$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內容被web服務解釋爲顯示。我想確保我沒有失去明顯的東西。我專門轉向Jsoup是因爲我不想編寫自定義解析器,因此我現在只保留當前的解決方案,並查看腳本放置中的更改(程序吐出的模板是黑盒子) 。 –