如何使用Jsoup替换每个标记中的“text”

时间:2015-05-24 15:09:24

标签: java html replace jsoup

我有以下html:

<html>
<head>
</head>
<body>
    <div id="content" >
         <p>text <strong>text</strong> text <em>text</em> text </p>
    </div>
</body>    
</html>

如何使用Jsoup库将“text”替换为每个标记中的“word”。 我想看看:

<html>
<head>
</head>
<body>
    <div id="content" >
         <p>word <strong>word</strong> word <em>word</em> word </p>
    </div>
</body>    
</html>

感谢您的任何建议!

UPD: 谢谢你的回答,但我找到了多种方式:

    Element entry = doc.select("div").first();
    Elements tags = entry.getAllElements();
    for (Element tag : tags) {
        for (Node child : tag.childNodes()) {
            if (child instanceof TextNode && !((TextNode) child).isBlank()) {
                System.out.println(child); //text
                ((TextNode) child).text("word"); //replace to word
            }
        }
    }

3 个答案:

答案 0 :(得分:2)

Document doc = Jsoup.connect(url).get();
String str = doc.toString();
str = str.replace("text", "word");

试试..

答案 1 :(得分:1)

快速搜索出现了这段代码:

Elements strongs = doc.select("strong");
Element f = strongs.first();
Element l = strongs.last();1,siblings.lastIndexOf(l));

首先,您要了解的是库是如何工作的以及它包含哪些功能,然后您将弄清楚如何使用库来执行您需要的操作。上面的代码似乎允许您选择一个强大的元素,此时您可以更新它的内部文本,但我确信有很多方法可以实现相同的目标。

通常,解析xml的大多数库都能够选择文档对象模型中的任何给定元素或任何元素列表,并且可以操纵元素本身,或者操作元素内部文本,属性等。

一旦您获得了使用不同库的更多经验,您的出发点就是查找库的文档以查看该库的功能。如果你看到一种方法表明它做了什么,那就是它的作用,你可以期望用它来实现这个目标。然后,您只需解析您正在使用的库的功能,而不是在Stack Overflow上编写问题,并找出如何使用它来执行您想要的操作。

答案 2 :(得分:0)

    String html = "<html> ...";
    Document doc = Jsoup.parse(html);
    Elements p = doc.select("div#content > p");
    p.html(p.html().replaceAll("text", "word"));
    System.out.println(doc.toString());

div#content > p表示元素<p>中的元素<div>,其ID为content

如果您只想在<strong>text</strong>

中替换文字
    Elements p = doc.select("div#content > p > strong");
    p.html(p.html().replaceAll("text", "word"));