Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 防止子元素被选中JSoup_Java_Jsoup_Children_Elements - Fatal编程技术网

Java 防止子元素被选中JSoup

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

我使用JSoup获取HTML文件中标记之间的文本,这些标记直接位于特定元素或其子元素/子元素中(子元素和子元素中的标记包含在select()中)。我首先使用select()获取div元素,然后使用for循环获取其中的p元素。但是,问题是,因为在其他div标记中有div标记,所以我得到了重复的文本。比如说,

<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