2013-03-04 61 views
1

我正在從數據庫中提取html電子郵件內容。 HTML中包含字符串,如:如何使用jSoup從<%@ include view =「MirrorPage」%>中刪除文本

<%@ include view="MirrorPage" %> and <%= stagingArea.techField.label %> 

,我想顯示前去除。

我正在使用Coldfusion 9和jSoup來解析html。 jSoup很有效地刪除了在html中的<腳本>內容。

<cfset emailHTML=jsoup.parse(detail["html"]) /> 
<cfset emailHTML.select("script").remove() /> 

我只是不清楚如何與jSoup選擇<%,因爲它不是一個真正的「標籤」。

感謝, 加里

回答

2

當您使用jSoup解析HTML包含<%@ ... %>它被轉化爲&lt;%@ ... %&gt;,並視爲文本。

由於它是簡單的文本,因此jSoup無法將其提取出來,或者將其與其他文本區別開來。

假設這些標記是遵循簡單的規則(即沒有嵌套,他們不會包含「%」的標誌之外,等等),你可以用這樣的正則表達式中刪除佔位符/標記:

<cfset emailHTML = rereplace(emailHTML.html() ,'&lt;%[@=][^%]+%&gt;','','all') /> 

(你可能還是不希望再使用jsoup.parse(emailHTML)再次得到字符串回到對象。)

當然,如果這些佔位符是有原因的,你可能需要做一些更復雜的不僅僅是簡單地刪除他們 - 如果他們可能包括HTML,那麼你需要考慮他們是否應該處理是前 jSoup被調用來刪除腳本標籤/等。

+0

感謝Peter,在思考了更多關於這個之後,我認爲正則表達式會成爲去除這些字符串的更好工具。在電子郵件應用程序中,它們用於生成內容。我只是爲了顯示目的而將數據庫拉出來,所以不需要它們。 – garyv 2013-03-04 14:13:14

+0

有時候,正則表達式最難的事情是如果它是正確的工具或者不正確的話。 :) 可能仍然值得用一個非空白字符串替換(例如'...') - 如果最終由於類似於空白的td而導致顯示差異 - 取決於觀衆是我猜的。 – 2013-03-04 14:18:28

相關問題