我需要轉換一些HTML文本嵌套標籤來裝飾「匹配」與CSS屬性來突出顯示它(如火狐搜索)。 我不能只是做一個簡單的替換(想想如果用戶搜索「img」例如),所以我試圖在正文文本(而不是標籤屬性)中進行替換。Swing Parser的handleText爲什麼不處理嵌套標籤?
我有一個非常簡單的HTML解析器,我覺得應該這樣做:
final Pattern pat = Pattern.compile(srch, Pattern.CASE_INSENSITIVE);
Matcher m = pat.matcher(output);
if (m.find()) {
final StringBuffer ret = new StringBuffer(output.length()+100);
lastPos=0;
try {
new ParserDelegator().parse(new StringReader(output.toString()),
new HTMLEditorKit.ParserCallback() {
public void handleText(char[] data, int pos) {
ret.append(output.subSequence(lastPos, pos));
Matcher m = pat.matcher(new String(data));
ret.append(m.replaceAll("<span class=\"search\">$0</span>"));
lastPos=pos+data.length;
}
}, false);
ret.append(output.subSequence(lastPos, output.length()));
return ret;
} catch (Exception e) {
return output;
}
}
return output;
我的問題是,當我調試這一點,handleText獲取調用與包括標籤的文字!這就像它只是深入一層。有人知道爲什麼是否有一些簡單的事情我需要做HTMLParser(沒有用太多)來啓用嵌套標籤的'正確'行爲?
PS - 我想出了自己 - 見下面的答案。簡而言之,如果您將HTML傳遞給HTML,而不是預先轉義的HTML,那麼它可以正常工作。衛生署!希望這可以幫助別人。
<span>example with <a href="#">nested</a> <p>more nesting</p>
</span> <!-- all this gets thrown together -->
這似乎是c與'handleText'的API文檔一致... – 2009-10-19 15:22:49