java - 如何使用 jsoup 从表中解析值?

标签 java android jsoup

<table class="local_table nbu_rate">
    <tr>
        <th>Currency</th>
    <th class="align_left">Name</th>
        <th class="width_25">Course</th>
    </tr>
    <tr>
        <td>USD</td>
        <td class="align_left">USD</td>
        <td>11.2416</td>
    </tr>
    <tr>
        <td>EUR</td>
        <td class="align_left">Euro</td>
        <td>15.5078</td>
    </tr>
    </table>

我如何解析表中的值。例如 11.24? 我试过这样做:

        try {
            doc = Jsoup.parse(url, 3000);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        Element table = doc.select("table[class=local_table nbu_rate]").first();

        Iterator<Element> ite = table.select("td[USD]").iterator();

        System.out.println("Value 1: " + ite.next().text());

但是我的程序崩溃了。 日志:

04-02 21:38:29.764: E/AndroidRuntime(5769): FATAL EXCEPTION: AsyncTask #1
04-02 21:38:29.764: E/AndroidRuntime(5769): java.lang.RuntimeException: An error occured while executing doInBackground()
04-02 21:38:29.764: E/AndroidRuntime(5769):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
04-02 21:38:29.764: E/AndroidRuntime(5769):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
04-02 21:38:29.764: E/AndroidRuntime(5769):     at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
04-02 21:38:29.764: E/AndroidRuntime(5769):     at java.util.concurrent.FutureTask.run(FutureTask.java:239)
04-02 21:38:29.764: E/AndroidRuntime(5769):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
04-02 21:38:29.764: E/AndroidRuntime(5769):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
04-02 21:38:29.764: E/AndroidRuntime(5769):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
04-02 21:38:29.764: E/AndroidRuntime(5769):     at java.lang.Thread.run(Thread.java:856)
04-02 21:38:29.764: E/AndroidRuntime(5769): Caused by: java.util.NoSuchElementException
04-02 21:38:29.764: E/AndroidRuntime(5769):     at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:572)
04-02 21:38:29.764: E/AndroidRuntime(5769):     at com.example.parsedatatest.MainActivity$NewThread.doInBackground(MainActivity.java:92)
04-02 21:38:29.764: E/AndroidRuntime(5769):     at com.example.parsedatatest.MainActivity$NewThread.doInBackground(MainActivity.java:1)
04-02 21:38:29.764: E/AndroidRuntime(5769):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
04-02 21:38:29.764: E/AndroidRuntime(5769):     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
04-02 21:38:29.764: E/AndroidRuntime(5769):     ... 4 more

最佳答案

问题出在

Element table = doc.select("table[class=local_table nbu_rate]").first();

请注意,类名的 css 选择器包括点 . .你的选择器应该是

Element table = doc.select("table.local_table.nbu_rate").first();

或者,只有一个类应该做:

Element table = doc.select("table.local_table").first();

编辑:

你的第二个问题似乎是

Iterator<Element> ite = table.select("td[USD]").iterator();

CSS 选择器 "td[USD]"将寻找 <td>具有名为 USD 的属性 的元素。这不存在。您需要调整您的选择器。 USD 是内部 HTML,而不是属性。

我想您需要阅读第 3 个 <td>获取数字值。但是,要有意义,您可能还需要了解货币......

关于java - 如何使用 jsoup 从表中解析值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22823731/

相关文章:

java - Listview 不再向其中的 spinner 注册 itemClickEvent

Java游戏使用线程在屏幕上移动物体,速度变慢

android - onPostExecute 中的 AlertDialog 未显示

android - 在Android上批量获取很多位图资源

java - 用 Java 解析 HTML 网页

java - Eclipse动态web项目IDE中 "Java Build Path"和 "Deployment assembly"有什么区别?

java - Eclipse 插件 : how to update a view once a Job is complete

安卓锁OnTouchListener

android - 控制使用 jsoup 抓取的网页的输出

java - 连接错误 : "org.jsoup.UnsupportedMimeTypeException: Unhandled content type"