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

やってみました

`ul.children()`

の直下の子ノードのみを返すと思いますul

于 2013-05-14T19:43:33.197 に答える
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

よくわかりませんが、このようなことを試してください

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 に答える