파이어 폭스 검색과 같이 강조 표시하기 위해 CSS 속성과 '일치'를 꾸미기 위해 중첩 태그가있는 일부 HTML 텍스트를 변환해야합니다. 나는 단순히 대체 할 수 없다. (예를 들어 사용자가 "img"를 검색했다면) 태그 속성이 아닌 본문 텍스트 내에서 바꾸기 만하면된다. 나는이 문제를 디버깅 할 때Swing Parser의 handleText가 중첩 된 태그를 처리하지 않는 이유는 무엇입니까?
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이 태그를 포함하는 텍스트를 호출지고있다 :
는 내가이 작업을 수행해야한다고 생각 아주 간단한 HTML 파서를 가지고! 마치 한 단계 깊숙이 들어가는 것과 같습니다. 왜 그런지 알아? 중첩 된 태그의 '적절한'동작을 가능하게하기 위해 HTMLParser에해야 할 일이 있습니까 (많이 사용하지 않았습니까?)?
PS - 나 자신을 알아 냈습니다. 아래 답변을 참조하십시오. 짧은 대답은 사전에 이스케이프 처리 된 HTML이 아닌 HTML을 전달하면 잘 동작합니다. 도! 희망이 다른 사람을 도와줍니다.
<span>example with <a href="#">nested</a> <p>more nesting</p>
</span> <!-- all this gets thrown together -->
'handleText'에 대한 API 문서와 일치 ... –