使用 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.
我正在尝试获取标签之间的文本并保存到某个变量中,例如:
在这里我想保存 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.