Java Jsoup解析一个表3次?

Java Jsoup解析一个表3次?,java,html,csv,jsoup,Java,Html,Csv,Jsoup,我有一个奇怪的问题,我对此束手无策。也许一双新的眼睛可以指出问题所在 我使用jSoup解析HTML文件问题是表集被输出到文件3-4次,即使是在写入新文件时也是如此。第一次它作为一条直线在.csv文件中输出,但每隔一次它的格式完全符合我的要求。但我显然希望第一次就把它做好,这样就有了奥尔尼第一次 我的代码: Document doc = new Document(file.toString()); doc = Jsoup.parse(file, null); Elements t

我有一个奇怪的问题,我对此束手无策。也许一双新的眼睛可以指出问题所在

我使用jSoup解析HTML文件问题是表集被输出到文件3-4次,即使是在写入新文件时也是如此。第一次它作为一条直线在.csv文件中输出,但每隔一次它的格式完全符合我的要求。但我显然希望第一次就把它做好,这样就有了奥尔尼第一次

我的代码:

Document doc = new Document(file.toString());
    doc = Jsoup.parse(file, null);

    Elements tables = doc.select("table");

    for (Element table: tables) {
        Elements rows = table.select("tr");
        for (Element row: rows) {
            Elements cells = row.getElementsByTag("td");
            StringBuffer values = new StringBuffer();
            for (Element cell: cells) {
                String cellText = cell.text();
                cellText = cellText.replaceAll(",", "");
                cellText = cellText.replaceAll("£", ",£");
                cellText = cellText.replaceAll(",£", "£");
                System.out.println(cellText);
                values.append(cellText + ",");
            }
            System.out.println(values.toString());
            addToFile(values + ",");
        }
    }

// add new data to mySNMPResults file
private static void addToFile(String myString) { // add newest entry to .csv
                                                    // file
    try {
        BufferedWriter out = new BufferedWriter(new FileWriter(
                "MyParsedDOMTree.csv", true));
        out.write(myString + "\n");
        out.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
它也可能只是一个复杂的HTML文件,各种表格相互嵌套,但我不明白这如何导致数字数据只出现一次的表格被输出三次

编辑

HTML片段:

<tr bgcolor = "#EEEEEE" height = 20 >
<td width = 15% >
<font face="tahoma" size="1">
Dept '<b>Food Incl Vat</b>'
</td>
<td width = 10% align =
right><font face="tahoma" size="1">
£688.95
</td>
<td width = 10% align =
right><font face="tahoma" size="1">
£642.60
</td>
<td width = 10% align =
right><font face="tahoma" size="1">
£767.95
</td>
<td width = 10% align =
right><font face="tahoma" size="1">
£3,007.00
</td>
<td width = 10% align =
right><font face="tahoma" size="1">
£1,525.60
</td>
<td width = 10% align =
right><font face="tahoma" size="1">
£1,970.40
</td>
<td width = 10% align =
right><font face="tahoma" size="1">
£353.00
</td>
<td width = 1%></td><td width
= 14% align = right bgcolor = "#DFDFDF"><font face="tahoma" size="1" color = '#444444'>
<b>£8,955.50</b></td>
</tr>

“含增值税的食品”部门
£688.95
£642.60
£767.95
£3,007.00
£1,525.60
£1,970.40
£353.00
£8,955.50

编辑:抱歉,代码中有错误。现在修好了

我真的没有足够的代码来做一个可靠的猜测,但我不知道为什么您要尝试获取表的大小,然后再遍历该表多少次。如果要查找表的根,则根下将是表的名称(表的类名应相同),然后搜索每个表以查找所需内容。也许一些代码会有所帮助:)

HTML:


谢谢你的回复,但是我担心与你使用的简单HTML相比,这个例子中的HTML是超级复杂的。我想将每个表打印到csv文件中。size()方法返回这个页面上的表的数量(总共27个),所以理论上我应该循环并打印出来。我注意到如果我将size替换为5,那么这个表只打印一次。问题是我想让它处理几个不同大小的HTML文件,所以我不能使用固定的数字…这就是为什么你需要找到所有的表,将它们放入元素数组,然后扫描该数组。你能给我一个html的例子,让我能帮你更多的忙吗?还有,你只是想得到表的名称,还是想从每个表中提取数据。逐字逐句地将每个表中的所有内容(以清晰的方式)打印到一个表中。例如,我举的一个例子是一周内花费的钱,最后是总额。这个大概有20排。我已经更新了代码,使其更简单,也使该文件中的平均表看起来更简单。
    <ul class="ListOfTables">
           <li class="TABLE">
                 <span class="item">
           <li class="TABLE">
                 <span class="item">
           <li class="TABLE">
                 <span class="item">
           <li class="TABLE">
                 <span class="item">
public void searchForItems(Document doc)
{
    Elements tables = doc.select("li[class=TABLE]");
    for (Element table : tables)
    {

        String item;
        Elements itemsInTable = table.select("span[class=item]");
        item = itemsIntTable.text();


        //Write the item to file. Depending on what is in your table, you might
        //have to write a more complex scan. Looking for things like attributes
    }
}