簡體   English   中英

Jsoup解析表3次?

[英]Jsoup parses a table 3 times?

我有一個奇怪的問題,我不知所措。 也許新鮮的眼睛可以解決這個問題!

我正在使用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>

編輯:對不起,代碼中有錯誤。 立即修復。

我確實沒有足夠的代碼來做出可靠的猜測,但是我不確定為什么您要嘗試獲取表的大小然后遍歷該表,但是很多時候.size()都會使您(我我猜3-4)。 您將要查找表的根,然后在根下將是表的名稱(表的類名稱應相同),然后在每個表中搜索要查找的內容。 也許一些代碼會有所幫助:)

HTML:

    <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">

Java代碼:

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
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM