使用Jsoup仅删除html标签并在标签内保留文本

时间:2018-07-06 06:16:50

标签: java jsoup

只希望删除内部标签“ span”,而不希望删除其中的文本

HTML

解析后看起来应该像

    <label for="CentreContent_AllHSNCodes">Display all HSN Codes  </label>
<input id="CentreContent_AllHSNCodes" type="checkbox" name="ctl00$CentreContent$AllHSNCodes" onclick="javascript:setTimeout(&#39;__doPostBack(\&#39;ctl00$CentreContent$AllHSNCodes\&#39;,\&#39;\&#39;)&#39;, 0)" />

请帮助。

3 个答案:

答案 0 :(得分:1)

解决此问题的最简单方法是使用String.replace()方法。

String newHtml = html.replaceAll( "<\\/?\\s*span.*?>", "");

如果您更喜欢使用Jsoup,它将变得更加复杂:

        Document doc = Jsoup.parse(html);
        for (Element e : doc.select("span")) {

            Element parent = e.parent();
            Element newParent = parent.clone();
            newParent.empty();
            for (Node n : parent.childNodes()) {

                if (n instanceof Element && ((Element) n).tag().getName().equals("span")) {
                    newParent.append(((Element) n).html());
                } else {
                    newParent.append(n.outerHtml());
                }

            }
            parent.replaceWith(newParent);

        }

答案 1 :(得分:0)

如果您的标签正确无误,您问如何用Java做到这一点...

String hi = "Hello World!"
String no_o = hi.replaceAll("o", "");

...应该有所帮助。

答案 2 :(得分:0)

使用StringUtils#substringBetween中的Apache Commons Lang,这样可以节省很多精力。

String spanText = StringUtils.substringBetween(source, "<span>", "</span>");
String result = source.replaceAll("<span>.+</span>", spanText);