2

我有点进退两难。我需要通过 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 文档可能会变得非常庞大。

任何帮助将不胜感激。

4

1 回答 1

0

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,您可以使用它做进一步的事情。

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

于 2012-10-03T11:21:20.660 回答