jsoup将令牌误认为是HTML标记

时间:2018-06-25 03:20:17

标签: jsoup

我有一个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

非常感谢, 本

2 个答案:

答案 0 :(得分:0)

我通过侵入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的帮助!

答案 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("<天津市企业实行商务卡结算财务管理暂行办法>", "&lt;天津市企业实行商务卡结算财务管理暂行办法&gt;");;
    doc = Jsoup.parse(html);
    System.out.println(doc.select("#span_docTitle").text());

输出:

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