【问题标题】:Deleting <textarea> tag from Document doc从文档文档中删除 <textarea> 标记
【发布时间】:2014-06-08 10:42:23
【问题描述】:

我即将解析这个网址: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;    

....
...
..

当然它正在选择文本区域,但无法解析内部元素。可能是由于 &lt 而不是

【问题讨论】:

    标签: java html-parsing jsoup


    【解决方案1】:

    如果您想删除整个文本区域标签,请使用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();
            }
        }
    
    }
    

    【讨论】:

      【解决方案2】:

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

      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());
          }
      }
      

      【讨论】:

      • 谢谢。我根据您的建议编辑问题。请参考。
      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-15
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多