我有一个html片段,如下所示:
<span class=#article-title#>About《About<SomeChineseChars》Blabla</span>
很抱歉,我使用拉丁字符,因为编辑器不允许输入中文字符
当我尝试使用
从该元素中提取文本时doc.select(".article-title").text();
我最终将得到以下结果:
About《About》Blabla
调试程序后,找到
<SomeChineseChars>
被视为HTML标记,JSoup如下自动关闭该标记
<SomeChineseChars></SomeChineseChars>
那么,是否有任何方法可以避免这种情况的发生,或者这是一个错误?
-=-=-=更新=-=-=-
建立dom之后,然后检查已解析的html,输出为
I cannot post img, so plz click me to view it
非常感谢, 本
答案 0 :(得分:0)
我通过侵入JSoup来构成一个解决方案,如下所示:
自定义HtmlTreeBuilder
public class TroilaHtmlTreeBuilder extends HtmlTreeBuilder {
private String zh = "[\\u4e00-\\u9fa5]+";
public TroilaHtmlTreeBuilder() {
}
@Override
Element insert(Token.StartTag startTag) {
if (startTag.tagName.matches(zh)) {
Token.Character ch = new Token.Character();
ch.data(startTag.toString());
insert(ch);
return null;
}
return super.insert(startTag);
}
public Document parse(Reader input, String baseUri) {
return super.parse(input, baseUri, ParseErrorList.noTracking(), this.defaultSettings());
}
}
我认为这不是解决问题的好方法,因此,如果您有更好的主意,请告诉我。
顺便说一句:非常感谢@Abhilash的帮助!
答案 1 :(得分:0)
Document doc = Jsoup.connect("http://gk.tj.gov.cn/gkml/00012525X/200804/t20080425_49468.shtml")
.timeout(180 * 1000).get();
String html = doc.outerHtml().replaceAll("<天津市企业实行商务卡结算财务管理暂行办法>", "<天津市企业实行商务卡结算财务管理暂行办法>");;
doc = Jsoup.parse(html);
System.out.println(doc.select("#span_docTitle").text());
输出:
转发《关于印发 <天津市企业实行商务卡结算财务管理暂行办法> 的通知》的通知