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

标签 java html parsing jsoup html-parsing

我正在尝试获取标签之间的文本并保存到某个变量中,例如: 在这里,我想保存 em 标签之间的值 return 。我还需要 p 标签中的其余文本, em 标签值通过 return 分配,并且 p 标签值应仅返回 --> 商品、取消订单、打印收据、跟踪您的购买情况或重新订购商品。 如果某个值在 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());
   }
}

最佳答案

如果您需要选择每个子文本和由不同标签包围的文本,您需要尝试选择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.

关于java - 使用 JSOUP 解析 HTMl - 需要特定模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61112897/

相关文章:

html - 添加|到菜单中的 li 标签

javascript - 如何获取&lt;input&gt;上传的图片大小

css - 递归下降解析和抽象语法树

java - 我的 Euclid 算法运行非常缓慢

java - 在与非托管对象具有持久关联的 jpa 实体 : You cannot flush unmanaged objects. 中设置外键时出错

java - 如何判断一个单词是否以元音开头

ruby CSV重复行解析

java - 这把锁到底有什么用呢?

javascript - 如何创建向右打开元素的侧边菜单导航栏

javascript - 解析运算符并在 JavaScript 中评估它们