繁体   English   中英

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

[英]Parsing nested HTML unordered lists with Jsoup

我正在解析带有嵌套无序列表的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>

我对关系li > ul > li (将其视为Element类型的Jsoup对象: grandParentNode > parentNode > eNodegrandParentNode.text() ,但是使用方法grandParentNode.text()我也得到了整个嵌套<ul>的文本<ul>列表(包含eNode.text() )。

    // getting the triplets
    Elements triplets = doc.select("li > ul > li");

    // print the triplet
    for (Element eNode : triplets)
    {
        Element parentNode = eNode.parent();
        Element grandParentNode = parentNode.parent();

        System.out.println("Current node: " + eNode.text());
        System.out.println("Grand parent: " + grandParentNode.text());
    }

输出为:

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

看一下Jsoup文档,看来我需要修改HTML才能使这些字符串包含在诸如value=""属性之类的东西中,但是我无法修改HTML ...最重要的是,所有这些<li class="category_x">在每个节点上重复使用相同的值,而不是树的“ li叶子”,因此它们在过滤数据方面并没有真正的帮助。

我已经尝试过诸如doc.select("li:lt(1) > ul > li"); 但它不起作用,问题在于HTML的结构以及我如何使用Jsoup的Element类中的方法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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM