3


完全な HTML テーブル (それぞれのすべての属性trtd追加の属性がある場合) を文字列にコピーするとします。すべてのコンテンツ (タグの間にあるもの) を取得して、元のテーブルのように編成された 2D 配列を作成するにはどうすればよいですか?

たとえば、このテーブルの場合:

<table border="1">
    <tr align= "center">
        <td align="char">TD1</td>
        <td>td1</td>
        <td align="char">TD1</td>
        <td>td1</td>
    </tr>
    <tr>
        <td>TD2</td>
        <td>tD2</td>
        <td class="bold>Td2</td>
        <td>td2</td>
    </tr>
</table>

この配列が欲しい: 配列

PS: 正規表現を使用できることはわかっていますが、非常に複雑です。多くのコードを書かなくても自動的にすべての作業を実行できる JSoup のようなツールが欲しい


Crawler Bot のモバイル Web サイト (サーバー側) のイベント追跡をキャンセルするにはどうすればよいですか?

現在、モバイル Web サイト向け Google アナリティクスのサーバー側実装を使用しています。ご存知のように、追跡データを送信するために画像が使用されています。ボットがモバイル Web サイトをクロールしているときに、イベントを追跡しないことはできますか?

タグに rel="nofollow" プロパティを使用する必要がありますか?

4

5 に答える 5

12

これは、JSoup を使用して行う方法です ( HTML には正規表現を使用しないでください)。

Document doc = Jsoup.parse(html);
Elements tables = doc.select("table");
for (Element table : tables) {
    Elements trs = table.select("tr");
    String[][] trtd = new String[trs.size()][];
    for (int i = 0; i < trs.size(); i++) {
        Elements tds = trs.get(i).select("td");
        trtd[i] = new String[tds.size()];
        for (int j = 0; j < tds.size(); j++) {
            trtd[i][j] = tds.get(j).text(); 
        }
    }
    // trtd now contains the desired array for this table
}

また、classあなたの例では、属性値が適切に閉じられていません:

<td class="bold>Td2</td>

そのはず

<td class="bold">Td2</td>
于 2012-08-15T11:25:31.030 に答える
5

多分String.split('<whateverhtmltabletag>')あなたを助けることができますか?

クラスもStringTokenizer役に立ちます。例:

String data = "one<br>two<br>three";  
StringTokenizer tokens = new StringTokenizer(data, "<br>");  
while (tokens.hasMoreElements()) {  
   System.out.println(tokens.nextElement());  // prints one, then two, then three
}

また、indexOf("<tag")ここの例を使用して: http://forums.devshed.com/java-help-9/parse-html-table-into-2d-arrays-680614.html

HTML パーサー ( jsoupなど) を使用して、内容をテーブルから配列にコピーすることもできます。JavaScriptの例を次に示します。 HTML の数値表を配列に解析する JavaScript

于 2012-08-15T10:48:13.323 に答える
0

気にしないでください、私はインターネットでこのコードを見ました:HtmlTableParser

実際には別の問題があるようですが、この質問とはまったく関係がないので、別の問題を開きます。

于 2012-08-15T10:57:12.030 に答える
0

私がこれまでに持っているものは最高のものではありませんが、役に立てば幸いです...文字列で簡単です

public void read_data() {
    try {
        file = new File("_result.xml");
        FileReader fileReader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        String line = "";
        String output = "";
        int a = 0, b = 0;
        boolean _write = false;

        while ((line = bufferedReader.readLine()) != null) {
            if(line.trim().startsWith("<td")) { _write = true; } else { _write = false; }

            if(_write) {
                a = line.indexOf('>')+1;
                b = line.lastIndexOf('<');
                output += line.substring(a,b) + "|";
            }

            if(line.trim().equals("</tr>")) {
                System.out.println(output);
                output = "";
            }

        }
        fileReader.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
于 2015-11-15T00:23:54.040 に答える