1

我正在解析这个页面段:

<tr valign="middle">
   <td class="inner"><span style=""><span class="" title=""></span> 2  <span class="icon ok" title="Verified"></span> </span><span class="icon cat_tv" title="Video » TV" style="bottom:-2;"></span> <a href="/VALUE.html" style="line-height:1.4em;">VALUE</a> </td>
   <td width="1%" align="center" nowrap="nowrap" class="small inner" >VALUE</td>
   <td width="1%" align="right" nowrap="nowrap" class="small inner" >VALUE</td>
   <td width="1%" align="center" nowrap="nowrap" class="small inner" >VALUE</td>
</tr>

我在变量 tv 中有这个片段:HtmlElement tv = tr.get(i);

<a href="/VALUE.html" style="line-height:1.4em;">VALUE</a>我以这种方式阅读标签:

HtmlElement a = tv.getElementsByTagName("a").get(0);        
object.name.value(a.getTextContent());

url = a.getAttribute("href");
object.url_detail.value(myBase + url);

我如何才能只读取其他<td>....</td>部分的 VALUE 字段?

4

2 回答 2

5

我建议使用XPath,这是解析 XML/HTML 的推荐方式

参考:如何在 Java 中使用 XPath 读取 XML

也看看这个问题:RegEx match open tags except XHTML self-contained tags

更新

如果我理解正确,您需要每个 td 的“价值”,对吧?如果是这样,您的 XPath 将是这样的:

//td[@class="small inner"]/text()
于 2013-03-12T13:05:19.097 回答
1

您可以尝试一个很棒的 java 包jsoup

更新:使用包,你可以解决这样的问题:

    String html = "<tr valign=\"middle\">"
            + "   <td class=\"inner\">"
            + "   <span style=\"\"><span class=\"\" title=\"\"></span> 2  <span class=\"icon ok\" title=\"Verified\"></span> </span><span class=\"icon cat_tv\" title=\"Video » TV\" style=\"bottom:-2;\"></span>"
            + "   <a href=\"/VALUE.html\" style=\"line-height:1.4em;\">VALUE</a> "
            + "   </td>"
            + "   <td width=\"1%\" align=\"center\" nowrap=\"nowrap\" class=\"small inner\" >VALUE</td>"
            + "   <td width=\"1%\" align=\"right\" nowrap=\"nowrap\" class=\"small inner\" >VALUE</td>"
            + "   <td width=\"1%\" align=\"center\" nowrap=\"nowrap\" class=\"small inner\" >VALUE</td>"
            + "</tr>";
    Document doc = Jsoup.parse(html, "", Parser.xmlParser());
    Elements labelPLine = doc.select("a[href]");
    System.out.println("value 1:" + labelPLine.text());

    Elements labelPLine2 = doc.select("td[width=1%");
    Iterator<Element> it = labelPLine2.iterator();
    int n = 2;
    while (it.hasNext()) {
        System.out.println("value " + (n++) + ":" + it.next().text());
    }

结果将是:

值 1:值
值 2:值
值 3:值
值 4:值
于 2014-03-10T04:34:05.930 回答