Как получить все HTML-теги по порядку из HTML-строки в Java
<td valign="top" width="230">
<div>
<b><a href="http://www.cs.cornell.edu/johannes/">Johannes Gehrke</a></b>
</div>
<div class="small">
Professor<br>Computer Science, CS Field Member<br>Director of Graduate Studies<br>
Ph.D., Univ of Wisconsin, Madison, 1999<br><b>Research focus:</b> Database systems, data mining, and data privacy
</div>
</td>
Я хотел бы получить последовательность тегов из заданной строки HTML. Какой самый простой способ сделать это? Например, принимая приведенную выше строку html в качестве входных данных, я бы хотел, чтобы мой метод вывел массив строк, т.е.[td,div,b,a,div,br,br,br,br,b]
,
я пробовал Jsoup
разобрать строку html, но, кажется, нет способа перехватить такие теги, как br
, Интересно, что любые другие Java-библиотеки могут помочь мне. Последним средством будет использование техники регулярных выражений. Если кто-то может придумать для этой цели аккуратное регулярное выражение, это тоже подойдет.
3 ответа
Вы можете использовать регулярные выражения:
Pattern p = Pattern.compile("<([^\\s>/]+)");
Matcher m = p.matcher(txt);
while(m.find()) {
String tag = m.group(1);
System.out.println(tag);
}
После того, как вы проанализировали строку с помощью JSoup, используйте ее метод getAllElements(), итерируйте результат и для каждого элемента вызовите tagName ().
Я хотел бы рассмотреть возможность использования HTMLEditorKit.Parser
, Даже если Swing может отображать только HTML 3.2, парсер должен читать и сохранять все теги:
public List<String> getTags(Reader reader)
throws IOException {
final List<String> tags = new ArrayList<>();
HTMLEditorKit.ParserCallback callback =
new HTMLEditorKit.ParserCallback() {
@Override
public void handleStartTag(HTML.Tag tag,
MutableAttributeSet attributes,
int pos) {
super.handleStartTag(tag, attributes, pos);
tags.add(tag.toString());
}
};
HTMLEditorKit.Parser parser = new ParserDelegator();
parser.parse(reader, callback, true);
return tags;
}