import org.jsoup.nodes.Node; //导入方法依赖的package包/类
private void parseObjectives(final Quest quest, final Element mainContainer, final Element questName) {
// Objectives section
Node objectivesNode = questName.nextSibling();
// Objectives text is the first non-empty text node immediately following the header
while (!(objectivesNode instanceof TextNode) || ((TextNode) objectivesNode).text().trim().isEmpty()) {
objectivesNode = objectivesNode.nextSibling();
}
final Node beforeObjectives = objectivesNode.previousSibling();
// If there is a h2.heading-size-3 right before the "objectives" text, it is probably not objectives,
// but rather progress or completion, like on the quest "Draenei Tail"
if (!(beforeObjectives instanceof Element && ((Element) beforeObjectives).tagName().equals("h2")
&& ((Element) beforeObjectives).hasClass("heading-size-3"))) {
quest.setObjectives(((TextNode) objectivesNode).text().trim());
}
// Objective completion stages
final Elements iconlists = mainContainer.select("table.iconlist");
final Element stagesTable = iconlists.first();
if (stagesTable != null) {
// Remove any subtables
stagesTable.select("table.iconlist").remove();
for (final Element stageLink : stagesTable.getElementsByTag("a")) {
// Find the innermost td element enclosing the a, and add its whole text
Element parent = stageLink.parent();
while (!parent.tagName().equals("td")) {
parent = parent.parent();
}
quest.getStages().add(parent.text());
}
// Suggested players
final Element suggestedPlayers = stagesTable.getElementsContainingOwnText("Suggested players:").first();
if (suggestedPlayers != null) {
String playerCountStr =
getRegexGroup(suggestedPlayers.ownText(), "Suggested players: ([0-9]+)", 1).get();
quest.setGroupSize(Integer.parseInt(playerCountStr));
}
}
// Provided items
if (iconlists.size() >= 2) {
final Element maybeProvided = iconlists.get(1);
final Node before = maybeProvided.previousSibling();
if (before instanceof TextNode && ((TextNode) before).text().contains("Provided")) {
maybeProvided.select("table.iconlist").remove();
for (final Element itemLink : maybeProvided.getElementsByTag("a")) {
quest.getProvidedItems().add(itemLink.text());
}
}
}
}