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 制定了一个解决方案,如下所示:

  1. 创建一个名为 org.jsoup.parser 的新包;
  2. 自定义一个 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("<天津市企业实行商务卡结算财务管理暂行办法>", "&lt;天津市企业实行商务卡结算财务管理暂行办法&gt;");;
    doc = Jsoup.parse(html);
    System.out.println(doc.select("#span_docTitle").text());

输出:

转发《关于印发 <天津市企业实行商务卡结算财务管理暂行办法> 的通知》的通知