Jsoup主体片段抛出HTML标签

时间:2012-10-02 15:48:13

标签: html parsing jsoup

我有点困境。我需要通过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文档会变得非常庞大。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

使用 JSoup 1.7.1 测试 - &gt;同样的问题。

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

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,您可以使用它进行更多操作。

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