Java 使用Jsoup解析嵌套的HTML无序列表

Java 使用Jsoup解析嵌套的HTML无序列表,java,html-parsing,html-lists,jsoup,Java,Html Parsing,Html Lists,Jsoup,我正在解析一个带有嵌套无序列表的HTML文件,下面是一个示例: <ul> <li class="category_x">xyz abc <ul> <li>foo 123 bar</li> <li>456 bar foo</li> </ul> </li> <li class="cat

我正在解析一个带有嵌套无序列表的HTML文件,下面是一个示例:

<ul>
    <li class="category_x">xyz abc
        <ul>
            <li>foo 123 bar</li>
            <li>456 bar foo</li>
        </ul>
    </li>
    <li class="category_x">aaa bbb ccc
        <ul>
            <li>xxx yyy zzz</li>
            <li>123 abc 456</li>
        </ul>
    </li>
</ul>
输出为:

Current node: foo 123 bar
Grand parent: xyz abc foo 123 bar 456 bar foo
Current node: 456 bar foo
Grand parent: xyz abc foo 123 bar 456 bar foo
Current node: xxx yyy zzz
Grand parent: aaa bbb ccc xxx yyy zzz 123 abc 456
Current node: 123 abc 456
Grand parent: aaa bbb ccc xxx yyy zzz 123 abc 456
我希望是:

Current node: foo 123 bar
Grand parent: xyz abc
Current node: 456 bar foo
Grand parent: xyz abc
Current node: xxx yyy zzz
Grand parent: aaa bbb ccc
Current node: 123 abc 456
Grand parent: aaa bbb ccc
Current node: foo 123 bar
Grand parent: xyz abc
Current node: 456 bar foo
Grand parent: xyz abc
Current node: xxx yyy zzz
Grand parent: aaa bbb ccc
Current node: 123 abc 456
Grand parent: aaa bbb ccc
看看Jsoup文档,我似乎需要修改HTML,以便将这些字符串包含在
value=”“
属性中,但我无法修改HTML。。。 除此之外,所有这些
  • 都会在每一个不是树的“
    li
    leaf”的节点上以相同的值到处重复,因此它们在过滤数据方面并没有真正的帮助

    我已经尝试过像
    doc.select(“li:lt(1)>ul>li”)
    但它不起作用,问题是HTML的结构以及如何使用Jsoup的
    元素
    类中的
    text()
    方法。问题是我不知道如何避免
    text()

    有什么想法吗

    谢谢

    使用
    ownText()
    方法仅选择元素直接拥有的文本,忽略任何子元素的文本

    因此,改变这一行:

    System.out.println("Grand parent: " + grandParentNode.text());
    

    输出现在将显示:

    System.out.println("Grand parent: " + grandParentNode.ownText());
    
    Current node: foo 123 bar
    Grand parent: xyz abc
    Current node: 456 bar foo
    Grand parent: xyz abc
    Current node: xxx yyy zzz
    Grand parent: aaa bbb ccc
    Current node: 123 abc 456
    Grand parent: aaa bbb ccc