从Document doc </textarea>中删除<textarea>标记

时间:2014-06-08 10:42:24

标签: java html-parsing jsoup

我即将解析此网址:http://online.wsj.com/public/page/news-wall-street-heard.html?dsk=y

Document jDoc = Jsoup.connect(url1).get();
System.out.println(jDoc1.text());

但是第二行(上面)的输出是textarea里面的TAGS +其他标签的文本。输出如下:

..
..
<ul class="">
<li><a data-time="1dy" data-frequency="1mi" class="mdm_time">1 Day</a></li>
<li><a data-time="5dy" data-frequency="15mi" class="mdm_time">5 Days</a></li>
..
..

所有html都会被打印(内部的内容)和其他标签的文本。我想要从Doc中删除此标记,或者想将其作为元素,以便我可以将其删除。

希望,我能够清楚地解释一切。请帮我解决这个问题。

编辑:

根据建议,我这样做了:

System.out.println(jDoc1.select("textarea"));

输出来的是:

    textarea id="wsj_autocomplete_template" style="display:none">   

    &lt;div&gt;
            &lt;div class=&quot;acHeadline hidden&quot;  &gt;
            &lt;/div&gt;
            &lt;div class=&quot;dropdownContainerClass&quot;&gt;
                &lt;div class=&quot;suggestionblock hidden&quot; templateType=&quot;C1&quot;&gt;    

....
...
..

当然它正在选择textarea,但无法解析内部元素。可能是由于&amp; lt而不是&lt;标签。有没有解决方法呢?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,你想要的是这个

Elements textareas = Jsoup.connect(url1).get().select("textarea");

for (Element textarea : textareas) {
    Elements elements = textarea.select("*"); 
    for (Element element : elements) {
        System.out.println(element.ownText());
    }
}

答案 1 :(得分:0)

如果要删除整个文本区域标记,请使用doc.select("textarea").remove();。或者,如果您想获得textarea的内容,请使用doc.select("textarea").text()。请注意,我使用的是text()方法,而不是toString()html()方法。这给出了确切的文本而不是html转义码。

如果你想操纵这个html,你可以再次解析它,如Document textareaDoc = Jsoup.parseBodyFragment(doc.select("textarea").text());

实施例

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;


public class WSJParser {

    public static void main(String[] args) {
        String url = "http://online.wsj.com/public/page/news-wall-street-heard.html?dsk=y";
        try {
            Document doc = Jsoup.connect(url).get();
            //doc.select("textarea").remove(); // Removes the entire text area tag
            Document textareaDoc = Jsoup.parseBodyFragment(doc.select("textarea").text());
            System.out.println(textareaDoc);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}