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>

これはフラグメントで、ご覧のとおり、テーブルの 2 つの行を表しています。

ただし、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タグにラップすることだと思います。

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 に答える