【问题标题】:Jsoup select text after tagJsoup选择标签后的文本
【发布时间】:2013-04-25 15:39:58
【问题描述】:

我想使用 jsoup 在每个标签之后提取一个文本。有什么方法可以直接选择它还是我必须对整个事情执行 .substring ?

<div>
<a href="#"> I don't want this text </a> 
**I want to retrieve this text**
</div>

【问题讨论】:

    标签: java jsoup


    【解决方案1】:
    public static void main(String... args) throws IOException {
    
        Document document = Jsoup.parse("<div>"
                + "<a href=\"#\"> I don't want this text </a>"
                + "**I want to retrieve this text**" + "</div>");
    
        Element a = document.select("a").first();
    
        Node node = a.nextSibling();
        System.out.println(node.toString());
    }
    

    输出

    **I want to retrieve this text**
    

    【讨论】:

    • 谢谢。正是我需要的。
    【解决方案2】:

    是的,你可以。

    1. 先获取&lt;div&gt;的html,然后使用.html()选择它的html
    2. 获取&lt;a&gt;元素,并获取它的html
    3. 获取&lt;a&gt;元素的html长度
    4. 排除第一部分。

    【讨论】:

      【解决方案3】:

      尽管提供了解决方向,但我认为上面的答案缺乏普遍性。

      nextSibling() 在 html 结构更改时无法使用。

      当我参考 Jsoup api 时,我发现了一个名为textNodes() 的方法,它可以从这个元素中获取文本节点的列表。

      public static String getTextAfterTag(Element ele) {
        String text = "";
        for(TextNode node: ele.textNodes()) {
          text += node.text();
        }
        return text;
      }
      

      希望能提供帮助。

      【讨论】:

        【解决方案4】:
           Document doc = Jsoup.parse("<div>"
                    + "<a href=\"#\"> I don't want this text </a>"
                    + "**I want to retrieve this text**" + "</div>"); 
        
           Elements tags = doc.getElementsByTag("a");
        
           for(Element tag : tags) {
              System.out.println(tag.text());
           }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-06-04
          • 1970-01-01
          • 2016-10-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多