如何将特定的html表行值存储到java中的arraylist中?

时间:2016-05-31 12:30:58

标签: java selenium selenium-webdriver

我有一个arrayList:

ArrayList<String> userNames = new ArrayList<String>();

我有一个包含不同行的表,每行都有一个用户名值作为字符串。我想将所有行的值存储到我的数组列表中。

表的HTML是:

<tbody>
    <tr class="odd">
        <td>
        <td class="left">
            <a href="saveSystemUser?userId=13">9090sdsd</a>
        </td>
        <td class="left">ESS</td>
    </tr>
    <tr class="even">
        <td>
        <td class="left">
            <a href="saveSystemUser?userId=2">Abc123</a>
        </td>
        <td class="left">ESS</td>
    </tr>
    <tr class="odd">
        <td/>
        <td class="left">
            <a href="saveSystemUser?userId=1">AdminOH</a>
        </td>
        <td class="left">Admin</td>
</tr>

我想从每个<a href="">userName</a>检索tr的文本,并将其存储在arrayList userNames中。

1 个答案:

答案 0 :(得分:0)

假设你想编写自己的HTML解析器。 我假设您的程序将HTML代码作为字符串。

如何解析HTML: 首先编写一个方法来查找给定字符串的索引,比如 “❬tr”或“❬/ tr”。它看起来像

private int parseTo(String findMe, String parseMe, int index)

这将从parseMe开始,从index开始,直到找到findMe的第一个字母。然后它通过findMe前进,检查每个字母findMe.charAt(n)对parseMe.charAt(index + n),如果它们都匹配,则返回index。

所以你可以用它来找到每个❬a❭的位置并匹配❬/a❭标签。对于每对,当您拥有它们的位置时,可以使用parseMe.substring(beginIndex,endIndex)来获取该字符串部分,然后将其添加到arrayList。 为此,找到每个“❬a”,然后找到以下“❭”,以避开href =“blablabla”废话。将该索引(+ 1)存储为第一个输入parseMe.substring()方法的int。然后你找到匹配的“❬/a❭”。存储索引 - 1作为substring()的第二个int。将parseMe.substring(firstIndex,secondIndex)添加到arrayList,然后从你输入substring()的第二个int开始继续到下一个“❬a”,这样parseTo()将找到下一个用户而不仅仅是相同的一遍一遍。

一些可能的问题:

  1. 我很确定javac会识别substring()和charAt(),但如果没有,请输入import java.lang.String;在顶部。

  2. 如果parseMe中没有更多的“❬a”子串,parseTo()将不会停止,直到它超过parseMe的长度,然后你将得到一个arrayOutOfBoundsException。如果您知道要查找多少用户,那应该不会成为问题,但如果您不知道,请通过parseMe计算锚标记的方法进行游行。