【问题标题】:Jsoup body fragment throws out HTML tagsJsoup 正文片段抛出 HTML 标签
【发布时间】:2012-09-23 12:14:37
【问题描述】:

我有点进退两难。我需要通过 JSoup 解析一大块 HTML,然后将该块传递给另一个处理 jsoup 元素的类。不幸的是,当我将一个代表表格一部分的块传递给 Jsoup 时,出于某种奇怪的原因,jsoup 只是抛出了所有的 html,除了文本之外什么也没给我。这是一个例子:

<tr>
   <td>Declared</td>
   <td>Other Supported Languages</td>
   <td>/ATP_ETK_89078_1006/atp_etk_89078_1006_p4/nonshared/E-trak_API_Build/obfuscated/vna.dll</td>
   <td align="right">1519616</td>
   <td align="right"></td>
   <td align="right"></td>
   <td>COM DEV</td>
   <td>Unspecified</td>
   <td>License for COM DEV</td>
   <td>Component (Dynamic Library)</td>
   <td>100%</td>
   <td style="text-align: center;"></td>
   <td></td>
   <td></td>
   <td valign="top"></td>
</tr>
<tr>
   <td>Declared</td>
   <td>Other Supported Languages</td>
   <td>/ATP_ETK_89078_1006/atp_etk_89078_1006_p4/nonshared/E-trak_API_Build/obfuscated/vna.dll</td>
   <td align="right">1519616</td>
   <td align="right"></td>
   <td align="right"></td>
   <td>COM DEV</td>
   <td>Unspecified</td>
   <td>License for COM DEV</td>
   <td>Component (Dynamic Library)</td>
   <td>100%</td>
   <td style="text-align: center;"></td>
   <td></td>
   <td></td>
   <td valign="top"></td>
</tr>

这是片段,您可以看到它只代表表格中的两行。

但是 Jsoup Doc 生成以下内容:

<html>
   <head></head>
   <body> 
   Declared Other Supported Languages /ATP_ETK_89078_1006/atp_etk_89078_1006_p4/nonshared/E-trak_API_Build/obfuscated/vna.dll 1519616   COM DEV Unspecified License for COM DEV Component (Dynamic Library) 100%     
   Declared Other Supported Languages /ATP_ETK_89078_1006/atp_etk_89078_1006_p4/nonshared/E-trak_API_Build/obfuscated/vna.dll 1519616   COM DEV Unspecified License for COM DEV Component (Dynamic Library) 100%           
   </body>
</html>

现在,如果表格的原始标头包括表格打开/关闭标头在内,它似乎可以工作,但这违背了此片段解析的全部目的,因为 HTML 文档可能会变得非常庞大。

任何帮助将不胜感激。

【问题讨论】:

    标签: html parsing jsoup


    【解决方案1】:

    JSoup 1.7.1 测试过 --> 同样的问题。

    我想,唯一的方法是将你的片段包装成一个table-tag。

    String html = ... // your html
    Document doc = Jsoup.parse(html);
    // doesn't work as you said
    
    
    String html = ... // your html
    Document doc = Jsoup.parse("<table>" + html + "</table>");
    // works
    

    不知道在你的情况下你是如何使用 Jsoup 的,但也许你可以这样做:

    public String doSomethingWithFragment(String html)
    {
        Document doc = Jsoup.parse("<table>" + html + "</table>");
        Elements fragment = doc.select("tbody > *");
    
        // Do something with 'fragment' here ...
    }
    

    在此示例中,fragment 包含您在上面发布的 HTML,您可以用它做进一步的事情。

    我知道这是一个非常奇怪的解决方法 - 在下一步中添加并删除它。但是...它可以工作(我希望) :-) ...

    【讨论】:

      猜你喜欢
      • 2021-04-12
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多