使用 JSOUP 解析 HTMl - 需要特定模式

Parse HTMl using JSOUP - Need specific pattern

我正在尝试获取标签之间的文本并保存到某个变量中,例如: 在这里我想保存 return 之间的值 em 标签。我还需要 p 标签中的其余文本, em 标记值分配给 return 并且 p 标签值应仅 return --> an item, cancel an order, print a receipt, track your purchases or reorder items. 如果某个值在 em 标签之前,即使该值也应该在不同的变量中,基本上一个 p 如果它有多个标签,那么它应该被拆分并保存到不同的变量中。如果我知道如何获取不在内部标签中的其余文本,我可以检索其余文本。

我在下面写了:下面是 returning 只是 "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());
   }
}

如果您需要 select 每个子文本和包含在不同标签中的文本,您需要尝试 selecting 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));
            }
        }

输出:

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