jsoup 将标记误认为是 HTML 标记
jsoup mistakes a token as an HTML tag
我有一个 html 片段如下:
<span class=#article-title#>About《About<SomeChineseChars》Blabla</span>
抱歉我这里用的是拉丁字符,因为编辑器不允许输入中文字符
当我尝试使用
从此元素中提取文本时
doc.select(".article-title").text();
我最终会得到以下结果:
About《About》Blabla
调试程序后,发现
<SomeChineseChars>
被视为 HTML 标签,JSoup 自动关闭标签如下
<SomeChineseChars></SomeChineseChars>
那么,有没有办法避免这种情况的发生,或者这是一个BUG?
-=-=-=更新=-=-=-
构建dom后检查解析的html,输出为
I cannot post img, so plz click me to view it
非常感谢,
本
我通过侵入 JSoup 制定了一个解决方案,如下所示:
- 创建一个名为 org.jsoup.parser 的新包;
自定义一个 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 的帮助!
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());
输出:
转发《关于印发 <天津市企业实行商务卡结算财务管理暂行办法> 的通知》的通知
我有一个 html 片段如下:
<span class=#article-title#>About《About<SomeChineseChars》Blabla</span>
抱歉我这里用的是拉丁字符,因为编辑器不允许输入中文字符
当我尝试使用
从此元素中提取文本时doc.select(".article-title").text();
我最终会得到以下结果:
About《About》Blabla
调试程序后,发现
<SomeChineseChars>
被视为 HTML 标签,JSoup 自动关闭标签如下
<SomeChineseChars></SomeChineseChars>
那么,有没有办法避免这种情况的发生,或者这是一个BUG?
-=-=-=更新=-=-=-
构建dom后检查解析的html,输出为
I cannot post img, so plz click me to view it
非常感谢, 本
我通过侵入 JSoup 制定了一个解决方案,如下所示:
- 创建一个名为 org.jsoup.parser 的新包;
自定义一个 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 的帮助!
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());
输出:
转发《关于印发 <天津市企业实行商务卡结算财务管理暂行办法> 的通知》的通知