Разбор HTMl с использованием JSOUP - Нужно указать шаблон c - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь получить текст между тегами и сохранить в какую-нибудь переменную, например: Здесь я хочу сохранить значение return, которое находится между em тегами. Также мне нужен остальной текст, который находится в тегах p, значение тега em присваивается с помощью return, а значение тега p должно возвращать только -> an item, cancel an order, print a receipt, track your purchases or reorder items., если какое-то значение раньше em тег, даже это значение должно быть в другой переменной, в основном один p, если в нем несколько тегов, то его следует разделить и сохранить в разных переменных. Если я знаю, как я могу получить остаток текста, который не находится во внутренних тегах, я могу извлечь остаток.

Я написал ниже: ниже возвращается просто «return», который находится в тегах «em». Здесь ep - это в основном doc.select(p), выбирая тег p, а затем повторяясь, не будучи уверенным, правильно ли я поступаю, любые другие подходы высоко ценятся.

String text ="\<p><em>return </em>an item, cancel an order, print a receipt, track your purchases or reorder items.</p>"

Elements italic_tags = ep.select("em");
for(Element em:italic_tags) { 
 if(em.tagName().equals("em")) {
    System.out.println( em.select("em").text());
   }
}

1 Ответ

0 голосов
/ 09 апреля 2020

Если вам нужно выбрать каждый вложенный текст и текст, заключенный в разные теги, вам нужно попробовать выбрать Node вместо Element. Я изменил ваш HTML, чтобы включить больше тегов, чтобы пример был более полным:

        String text = "<p><em>return </em>an item, <em>cancel</em> an order, <em>print</em> a receipt, <em>track</em> your purchases or reorder items.</p>";
        Document doc = Jsoup.parse(text);

        Element ep = doc.selectFirst("p");
        List<Node> childNodes = ep.childNodes();
        for (Node node : childNodes) {
            if (node instanceof TextNode) {
                // if it's a text, just display it
                System.out.println(node);
            } else {
                // if it's another element, then display its first
                // child which in this case is a text
                System.out.println(node.childNode(0));
            }
        }

output:

return 
an item, 
cancel
 an order, 
print
 a receipt, 
track
 your purchases or reorder items.
...