2016-02-05 56 views
0

我有一個需求,我必須解析包含多個記分卡表的HTML頁面。表結構保持不變,但根據不同匹配的數據,不同的表可以包含不同的表,但列名相同。 現在我需要根據表中的列名和其中包含的數據與參數對進行搜索。例如如果我有一個名爲playername的列,並且多個表包含很多玩家的名字。如果我通過傳遞2個參數(playername(列名)和Jason)來搜索特定的玩家名稱,它應該獲取playername列中包含Jason作爲其數據的所有行。我可以傳遞另一對參數作爲AND - matchesplayed(列名)和15,它應該從上面的結果集中獲取所有行,Jason在其中進行了15次匹配。 你能幫助我怎麼做到這一點。我試過的邏輯是 - 獲取不同數組列表中所有列的數據。然後創建一個包含列名作爲關鍵字和其值作爲包含該列數據的不同數組列表的映射。我的方法是否正確或者我需要使用不同的方法來解決它。 感謝您的幫助。解析HTML並存儲在java集合中

+0

不要試圖用正則表達式/子字符串/ indexOf的解析html。使用http://www.jsoup.org –

回答

0

您可以使用Jsoup獲取HTML文檔,然後使用輸入的播放器名稱值編寫一個方法。此方法應通過HTML文檔中的<table>元素進行解析,以獲取所需內容。如果您瞭解Jquery/css選擇器,解析將變得很容易。

檢查此鏈接Jsoup選擇器。 http://jsoup.org/apidocs/org/jsoup/select/Selector.html

+0

謝謝KRam。我正在使用Jsoup。但不知道如何映射列名和值來查找匹配的記錄,然後在頂部,如果我有另一個列名和值的參數對,我怎麼能從早期返回的結果集中選擇子集。 – user4067046

+0

您可以搜索

>​​值來搜索所需的值。 – KRam1802

+0

您可以搜索

>​​值來搜索所需的值。 元素值= doc.select(「Your CSS Selector」); 可以從Chrome的開發者控制檯輕鬆獲取CSS選擇器 – KRam1802

0

讓我們來訂購。我用你的例子。

1)你要做的第一件事就是搜索playername == Jason的行。使用jsoup或其他HTML解析器,您可以輕鬆訪問其中包含Jason的td。從那裏,您可以輕鬆訪問trtable

2)使用table,您可以訪問第一個trth來個性化列名以用作關鍵字。然後使用位置邏輯(第一個與第一個,第二個與第二個),您可以瞭解哪個列名對應於哪個內容(在td

3)如何收集數據取決於您。可能Map<String, String>可能是一個解決方案。或者,如果數據是靜態的,您可以創建一個pojo並使用反射api來填充它。

給我們更多的細節和代碼片段,我們可以幫助您更多。