2012-02-15 12 views
2

私は比較的厄介なWebページを解析しようとしています。それは私が抽出したいいくつかのキーと値のペアを含んでいます。これらのペアの統合テーマは、空ではなく、子を持たず、COLSPAN属性を持たないということです。私が試したことは、論理的には意味があるようですが、結果は出ません。子要素を持たず、COLSPAN属性を持たないTD要素のJsoupセレクタは何でしょうか?

Elements tds = document.select("td:not([colspan]):not(:has(*))"); 

だから私はあることのTDたい:

  1. がCOLSPAN
  2. が含まれていないが、任意の子どもたちに

をお持ちでないが、私が接近していなければならないように思えるが、ただの運を持っていません。何かご意見は?

+1

小さなHTMLサンプルを投稿できますか? –

+0

あなたのセレクターは私のためだけに機能します。どのJsoupバージョンを使用していますか?最新のものであれば、HTMLマークアップも投稿し、入手したいものが何であるかを指摘する必要があります。 – BalusC

答えて

2

ループを使用して選択したくない要素を削除する答えが出てきました。

http://jsoup.org/apidocs/org/jsoup/select/Selector.html

私はあなたの選択のうち、維持しようとしている2つの状況がありますテーブルを嘲笑。

String html = 
    "<table>" + 
      "<thead><tr><th>Col1</th><th>Col2</th><th>Col3</th></tr></thead>" + 
      "<tbody>" + 
       "<tr><td>row1col1</td><td>row1col2</td><td>row1col3</td></tr>" + 
       "<tr><td colspan='3'>row2fullrow</td></tr>" + 
       "<tr><td></td><td>row3col2</td><td><strong>row3col3</strong></td></tr>" + 
       "<tr><td>row4col1</td><td colspan='2'><strong>row4col2and3</strong></td></tr>" + 
      "</tbody>" + 
    "</table>"; 

    Document doc = Jsoup.parse(html); 
    for(Element td : doc.select("td")) { 
     if (td.children().size() > 0 || td.hasAttr("colspan")) { 
      td.remove(); 
     } 
    } 
    System.out.println(doc); 

+++++++++++++++++++++++
UPDATE
+++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++あなたのHTMLは、私が私のもので表現していない他の小さなものを持っていなければなりません。

String html = 
    "<table>" + 
      "<thead><tr><th>Col1</th><th>Col2</th><th>Col3</th></tr></thead>" + 
      "<tbody>" + 
       "<tr><td>row1col1</td><td>row1col2</td><td>row1col3</td></tr>" + 
       "<tr><td colspan='3'>row2fullrow</td></tr>" + 
       "<tr><td></td><td>row3col2</td><td><strong>row3col3</strong></td></tr>" + 
       "<tr><td id='x'>row4col1</td><td colspan='2'><strong>row4col2and3</strong></td></tr>" + 
      "</tbody>" + 
    "</table>"; 

    Document doc = Jsoup.parse(html); 
    System.out.println(doc.select("td:not([colspan]):not(:has(*))")); 
+0

あなたが正しいかもしれません。それは確かにクリーンなコード以外のものです。私はそれと一緒に遊ぶつもりです。プログラマチックなアプローチを取ることはできましたが、セレクタにはまだ問題があります。もう少し手を加える時間があったら、アップデートを与えるだろう。 – meesterguyperson

関連する問題