【问题标题】:Java - Don't know how to parse this kind of HTMLJava - 不知道如何解析这种 HTML
【发布时间】:2014-11-13 19:31:33
【问题描述】:

我正在寻找一种在 Java 中解析这种 HTML 的方法。

<tr class="cBackHeader backCat" ...>
   <th class="padding" ...>
       ...
       <a href="{{URL CATEGORY}}" class="cHeader">{{TITLE CATEGORY}}</a>
   </th>
</tr>
(<tr class="sujet..." ...>
   ...
   <td ... class="subjectCase3" ...>
        <a href="{{URL TOPIC}}" class="cCatTopic" title="{{ID TOPIC}}">{{TITLE TOPIC}}</a>
   </td>
   ...
</tr>)+

我想在 {{ }} 之间整理好每个变量。 我已经设法获得了这种模式的第一部分:

<th class=\"padding\".*?>.*?<a href=\"(.+?)\" class=\"cHeader\">(.+?)</a></th>

但我不知道如何处理第二部分(它们可能有很多 td.subjectCase3)。

编辑:这是我使用 Jsoup 的解决方案,但这不如使用 Pattern 和 Matcher 优化。

 Document document = Jsoup.parse(response);
 Element tmp;
 Elements elements = document.select("tr.cBackHeader,tr.sujet");
 for (Element el : elements) {
   if (el.hasClass("cBackHeader")) {
     tmp = el.select("a.cHeader").first();
     result.add(new TopicItem(null, tmp.ownText()));
   } else if (el.hasClass("sujet")) {
     tmp = el.select("td.sujetCase3 a").first();
     result.add(new TopicItem(new Topic(tmp.attr("title"), tmp.attr("href"), tmp.ownText()), null));
   }
 }

你怎么看?

【问题讨论】:

  • 获取 DOM Parser 依赖项。用它。不是正则表达式。解析 HTML 的正则表达式不是万无一失的,而且会搞砸你,尤其是当你匹配的文件是 this HTML.
  • 像 Jsoup 这样的 DOM 解析器?
  • 是的,Jsoup 是可靠的解析器之一。使用它。
  • 您无法使用正则表达式解析 [X]HTML:stackoverflow.com/a/1732454/64217
  • 你知道如何用 Jsoup 做到这一点吗?尤其是第二部分

标签: java regex parsing html-parsing


【解决方案1】:

我会使用正则表达式:

(href="{{).+?[}]

总是会退出的: href="{{URL TOPIC}

然后在 Java 中我会使用 String.split() 方法。

String string = "href="{{URL TOPIC}";
String[] parts = string.split("{");
String part1 = parts[0]; // href="
String part2 = parts[1]; // ""
String part3 = parts[2]; // URL TOPIC}

从那里我会修剪尾随的“}”;

return part3.trim("}");

它并不漂亮,但它得到了结果。

【讨论】:

  • 我很抱歉,但如果你基本上说你真的不知道如何正确地做到这一点并且你知道你这样做的方式很糟糕,那么也许这不是正确的话题提供意见。只是我的 2c。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
  • 2019-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-11
相关资源
最近更新 更多