Как получить все 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;
}
Другие вопросы по тегам