【问题标题】:Using jsoup with dynamic id's使用带有动态 id 的 jsoup
【发布时间】:2012-06-07 07:57:24
【问题描述】:

我正在尝试使用 jsoup 来解析 html 文件。它是使用表格来展示产品的。每个产品都在一个表中,其 id 范围从 1 到“n”。就像下面的例子:

<table align="center" width="98%" id="A + 1">
   <tbody>
      <tr>
         <td valign="top" style="width: 03%;">
            <span class="line">1</span>
         </td>
         <td valign="top" style="width: 56%;">
            <span class="line">PRODNAME</span>
         </td>
         <td valign="top" style="width: 10%;">
            <span class="line">850.000</span>
         </td>
      </tr>
   </tbody>
</table>

所以第一个产品将在桌子上,id 为“A + 1”,第二个产品在“A + 2”中,依此类推。

我无法使用选择器来遍历这些表。我在做:

Document doc = Jsoup.parse(html);
Elements products = doc.select("table[idˆ=A]");
for (Element product : products) {
   // do something
}

如果我没看错 (http://jsoup.org/apidocs/org/jsoup/select/Selector.html),doc.select("table[idˆ=A]") 应该检索所有 id 属性以“A”开头的表...

但是我的 Elements 对象(产品)是空的……我做错了什么?

我在带有 Netbeans 7.1.2 的 Mac OS X (10.7.4) 上使用 jsoup 1.6.3、java 1.6.0_31。

任何帮助表示赞赏。

【问题讨论】:

    标签: java css-selectors html-parsing jsoup


    【解决方案1】:

    您似乎在选择器中使用了错误的抑扬符,但我不确定 jsoup 是否应该返回空结果集或在无效选择器上抛出异常。

    不管怎样,试试这个吧:

    Document doc = Jsoup.parse(html);
    Elements products = doc.select("table[id^=A]");
    for (Element product : products) {
       // do something
    }
    

    【讨论】:

    • 是的,它解决了问题,虽然我从来不知道第二个抑扬符的存在。我正在使用与 6 键相邻的那个(MacBook 键盘上的 shift + 6)。无论如何,我从您的选择器中进行了剪切和粘贴,并且成功了。并排的差异是惊人的......
    • @Bob Rivers:嗯,奇怪。我的 MacBook 的键盘产生与此处相同的 ASCII 抑扬符(尽管我是从我的 iPhone 上发布的......)。可能是编码 booboo 或键盘布局怪癖。
    • 不错的收获!使用时髦的抑扬符,jsoup 正在寻找属性 name = "id^" value = "A",这可能是一个有效的选择器,所以它不会抛出异常。
    • @Jonathan Hedley:嗯,你说得有道理。就 CSS 而言,我不完全确定 idˆ 是否是一个有效的属性名称,但如果 jsoup 接受它...
    猜你喜欢
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2019-08-10
    • 2021-02-28
    • 2021-02-20
    • 1970-01-01
    相关资源
    最近更新 更多