Java 防止子元素被选中JSoup
我使用JSoup获取HTML文件中标记之间的文本,这些标记直接位于特定元素或其子元素/子元素中(子元素和子元素中的标记包含在select()中)。我首先使用select()获取div元素,然后使用for循环获取其中的p元素。但是,问题是,因为在其他div标记中有div标记,所以我得到了重复的文本。比如说,Java 防止子元素被选中JSoup,java,jsoup,children,elements,Java,Jsoup,Children,Elements,我使用JSoup获取HTML文件中标记之间的文本,这些标记直接位于特定元素或其子元素/子元素中(子元素和子元素中的标记包含在select()中)。我首先使用select()获取div元素,然后使用for循环获取其中的p元素。但是,问题是,因为在其他div标记中有div标记,所以我得到了重复的文本。比如说, <div id = div1> <p>Stack Overflow</p> <div id = div2> &l
<div id = div1>
<p>Stack Overflow</p>
<div id = div2>
<p>Ask Question, Get Answer</p>
...
堆栈溢出
问问题,得到答案
...
如果我在div1中选择,我会得到“堆栈溢出”和“问问题,得到答案”,如果我在div2中选择,我会得到“问问题,得到答案”。正如你所看到的,“问问题,得到答案”会重复两次,我只想要一次
因此,我不希望选择任何子级
谢谢你的帮助 如果我正确理解你的问题,你想要的是直接的孩子而不是子孩子。为此,请使用CSS直接子体“>”运算符 说你有
div#some-parent
div
p para1
p para2
div
div
p para3
p para4
div
如果您想得到div
,它是p
的父对象,而不是它的兄弟对象,那么您可以使用类似div#some parent>div
的选择器
编辑:如果要访问感兴趣元素的文本节点并忽略其子元素的文本,则应使用org.jsoup.nodes.element.ownText()代码>方法。例如
document.select("div#some-parent").get(0).ownText();
我看到这种可能性:
String html =
"<div id = div1>"+
"<p>Stack Overflow</p>"+
"<div id = div2>"+
"<p>Ask Question, Get Answer</p>"+
"</div>"+
"</div>";
doc = Jsoup.parse(html);
doc = Jsoup.parse(html);
Elements divPs = doc.select("div>p");
for (Element divP : divPs){
System.out.println(divP.ownText());
}
诀窍是用
选择器选择任何div的直接p子级,然后只输出每个p的。(这仅在p标记包含内部标记时才需要,在您的示例中没有给出)我修改了我的问题,使其不那么模棱两可。感谢您的回复,但我不希望选择任何孩子,只希望选择家长。因此,如果我使用您的示例,将返回的唯一元素是div#some parent(它的所有子元素都包含在其中),那么为什么不选择“div#some parent”呢?或者您只希望文本位于div#some parent中,不包括子元素的所有文本……这些答案对您有帮助吗?如果是,请投票表决。如果一个答案解决了你的问题,请考虑接受这个答案。
Stack Overflow
Ask Question, Get Answer