0

我正在尝试进行一些解析,但我被卡住了……这是 HTML 的结构:

<ul class="sub-menu"> 
<li id="1" class="1"><a href="http://link">SOME TEXT</a> 
    <ul class="sub-menu"> 
        <li .... ><a ... /></li>
        <li .... ><a ... /></li>
        <li .... ><a ... /></li>
    </ul>
</li>
<li id="2" class="2"><a href="http://link2">SOME OTHER TEXT</a> 
    <ul class="sub-menu"> 
        <li .... ><a ... /></li>
        <li .... ><a ... /></li>
        <li .... ><a ... /></li>
    </ul>
</li></ul>

我需要获取每个 li(id = 1、2 和 s),然后将 lis 放入其中(<li .... ><a ... /></li>)。

这是我的 Java 的外观:

// ul contains the source above
Elements lis = ul.select("li"); // I know that this line screws up everything here, but I can't figure out how to do it correctly
for(Element li: lis)
{
    String text = li.select("a").first().text();
    Elements lis2 = li.select("ul[class=sub-menu]").first().getElementsByTag("li");     
    for(Element li2: lis2)
    {
        Element a = li2.select("a").first();
        // and other stuff with 'a'
    }
}

那么有人可以帮我解决这个问题吗?

编辑:问题是ul.select("li");返回我在这里写的源代码中的每一个'li'。我需要获取 id 为 1、2 等的 lis。然后我需要得到那些<li .... ><a ... /></li>。PS对不起我的英语不好。

4

3 回答 3

0

我不确定,但试试这样的

for( Element element : doc.select("[li]") )
{
    if( element.attr("id")== 1 || element.attr("id").getValue()== 2 )
    {
        // thats your elements 'element'
        System.out.println(element);
    }
}

问候,雨果佩德罗萨

于 2013-05-14T15:50:52.553 回答
0

使用JSoup内置的比较方法,如<、>等。

您可以通过包含一个伪选择器来选择元素,该选择器将查看 DOM 结构中相对于其父级的相对位置:

Elements lis = ul.select("li:lt(2)");

这应该只返回 li 的 0 和 1。

请参阅 JSoup 文档以了解伪选择器,它比我能更好地解释这一点!

http://jsoup.org/cookbook/extracting-data/selector-syntax

于 2013-05-15T06:51:47.663 回答
0

你有没有尝试过

`ul.children()`

我认为它只会返回ul.

于 2013-05-14T19:43:33.197 回答