I'm currently working with a <ul>
element with a lot of first-level <li>
elements. I want to get those elements and only those elements. However, when I get them either using Jsoup selector or getElementsByTag, it returns also <li>
elements inside those first-level <li>
elements.
How do I do it such that I only get the first-level <li>
elements?
Here's the code:
Elements bundleList = indieGala.select("section.games_bundle_box2")
.get(0).select("ul.unlock")
.get(0).getElementsByTag("li");
Here's the the html:
<section class="games_bundle_box2">
<div class="games-container">
<!-- List Game Unlocked -->
<ul class="unlock">
<!-- Item -->
<li>
<!-- Preview Thumb -->
<a href="#game1" class="fancybox-various" title="Desura & Steam for Windows and Mac - This game has been GreenLighted on Steam and all buyers of The IndieGala Flashpoint bundle will receive Steam keys in a few weeks!">
<span class="tier1">
Pay minimum
<em class="color-text">
$1
</em>
to get Steam & Desura keys!
</span>
<span class="boxed">
</span>
<span class="steam-temp">
</span>
<span class="desura-icon">
</span>
<img src="img_game/ig-flashpoint/knytt.jpg" alt="">
<!-- 110 x 110 -->
<span class="item-title">
Knytt Underground
</span>
</a>
<!-- End Preview Thumb -->
<!-- Pop-Up -->
<div id="game1" class="modal_content">
<!-- Video Game Box -->
<div class="game_movie">
<iframe width="488" height="300" src="http://www.youtube.com/embed/NwZ2Z7WRQrI?rel=0&vq=hd720" frameborder="0" allowfullscreen="">
</iframe>
</div>
<!-- End Video Game Box -->
<!-- Game Description -->
<div class="game_description">
<h2>
<a href="http://www.desura.com/games/knytt-underground" target="_blank">
Knytt Underground
</a>
</h2>
<a href="http://nifflas.ni2.se/" target="_blank">
Nifflas' Games
</a>
<p style="font-weight: bold;">
IMPORTANT NOTE: This game has been accepted on Steam. As soon as it will available on the Steam store, all buyers will receive a Steam key for it.
</p>
<p>
Immerse yourself in a unique and challenging underground adventure!
</p>
<p>
Knytt Underground is the latest iteration in the critically acclaimed Knytt series. It takes place in the same universe as Knytt Stories, the renowned indie game from Nicklas Nygren, a.k.a. 'Nifflas'.
</p>
<p>
Each room in the huge map offers a small challenge to overcome using the unique tried and tested mechanics that have already reached over 1 million fans worldwide. Blending zen-like gameplay; enjoy an unparalled sense of freedom by running, jumping, climbing, swinging and bouncing. Knytt Underground delivers a unique and captivating, platform adventure experience allowing you to explore over 1,800 rooms and complete multiple story-driven quests.
</p>
<p>
<a href="#" target="_blank">
System requirements
</a>
</p>
<p>
Operating system: Windows (XP / Vista / 7 / 8) or Mac OS 10.6
<br>
OpenGL compatible graphics card with 512MB memory or more.
<br>
A 2ghz CPU is needed.
<br>
The OS X version requires Mac OS 10.6 and must be running in 64-bit mode.
<br>
</p>
</div>
</div>
<!-- End Pop-Up -->
</li>
<!-- End Item -->
<li>
<a href="#game2" class="fancybox-various" title="Steam for Windows">
<span class="boxed">
</span>
<span class="steam-icon">
</span>
<img src="img_game/ig-flashpoint/saira.jpg" alt="">
<span class="item-title">
Saira
</span>
</a>
<div id="game2" class="modal_content">
<div class="game_movie">
<iframe width="488" height="300" src="http://www.youtube.com/embed/iFPaXcLF5b0?rel=0&vq=hd720" frameborder="0" allowfullscreen="">
</iframe>
</div>
<div class="game_description">
<h2>
<a href="http://store.steampowered.com/app/48900/" target="_blank">
Saira
</a>
</h2>
<a href="http://nifflas.ni2.se/" target="_blank">
Nifflas' Games
</a>
<p>
Saira is a puzzle platformer with non-linear gameplay and a whole universe for you to explore. The game is heavily influenced by classic puzzle adventure games and uses a new unique graphical style combining high resolution photography into a lush and mysterious world.
</p>
<p>
The eponymous Saira is a photographer who specializes in digitally capturing dangerous places and animals across the universe. For reasons unknown, she finds herself as the only remaining person in the entire galaxy. Saira has no weapons, she will use only her mind and agility to progress through seven star systems and over 60 well-crafted puzzles. Over two hours of originally-scored music will help her maintain focus and unlock one of six vastly unique endings.
</p>
<ul>
<li>
Over 60 well-crafted puzzels.
</li>
<li>
A universe full of surprising creatures and locations for you to explore.
</li>
<li>
11 layers of high definition parallax scrolling and a two hour soundtrack gives the universe of Saira it's unique atmosphere.
</li>
<li>
Non-linear gameplay
</li>
<li>
Multiple endings
</li>
</ul>
<p>
<a href="#" target="_blank">
System requirements
</a>
</p>
<p>
OS: Windows 2000 or later
<br>
Processor: 2.1Ghz or higher
<br>
DirectX®: 9
<br>
Hard Drive: 250 MB for downloading the game + 200 MB for playing
<br>
</p>
</div>
</div>
</li>
<!-- End Item -->
<!-- Item -->
<li>
<!-- Preview Thumb -->
<a href="#game3" class="fancybox-various" title="Steam for Windows">
<span class="boxed">
</span>
<span class="steam-icon">
</span>
<img src="img_game/ig-flashpoint/musaic.jpg" alt="">
<!-- 110 x 110 -->
<span class="item-title">
Musaic Box
</span>
</a>
<!-- End Preview Thumb -->
<!-- Pop-Up -->
<div id="game3" class="modal_content">
<!-- Video Game Box -->
<div class="game_movie">
<iframe width="488" height="300" src="http://www.youtube.com/embed/ZswOQE8MDbo?rel=0&vq=hd720" frameborder="0" allowfullscreen="">
</iframe>
</div>
<!-- End Video Game Box -->
<!-- Game Description -->
<div class="game_description">
<h2>
<a href="http://store.steampowered.com/app/29130/" target="_blank">
Musaic Box
</a>
</h2>
<a href="http://kranx.com/en/" target="_blank">
KranX Productions
</a>
<br>
<br>
<p>
Uncover all of your grandfather's sheet music, hidden in his home amongst a treasure trove of gorgeous antiques and musical relics. Melodious music box games will let you piece these special compositions together and unleash their symphonious secrets. Unlock Creative Mode and write your own outstanding arrangements. With a house full of secrets and a box full of music the aural excitement never ends.
</p>
<ul>
<li>
Beautifully rendered graphics
</li>
<li>
Entrancing musical score
</li>
<li>
Unlock musical mysteries!
</li>
</ul>
<p>
<a href="#" target="_blank">
System requirements
</a>
</p>
<p>
Supported OS: Microsoft® Windows® 2000/XP/Vista
<br>
Processor: 800Mhz
<br>
Graphics: DirectX® compatible with 16 MB of Video Memory
<br>
Sound: DirectX® compatible Sound Card
<br>
DirectX® Version: DirectX 8.0
<br>
Memory: 256 MB RAM (512+MB recommended)
<br>
Hard Drive: 54 MB or more
<br>
</p>
</div>
<!-- End Game Description -->
</div>
<!-- End Pop-Up -->
</li>
<!-- End Item -->
<!-- Item -->
<li>
<!-- Preview Thumb -->
<a href="#game4" class="fancybox-various" title="Steam for Windows">
<span class="boxed">
</span>
<span class="steam-icon">
</span>
<img src="img_game/ig-flashpoint/yumsters.jpg" alt="">
<!-- 110 x 110 -->
<span class="item-title">
Yumsters 2: Around the World
</span>
</a>
<!-- End Preview Thumb -->
<!-- Pop-Up -->
<div id="game4" class="modal_content">
<!-- Video Game Box -->
<div class="game_movie">
<iframe width="488" height="300" src="http://www.youtube.com/embed/m19AcPO_LMQ?rel=0&vq=hd720" frameborder="0" allowfullscreen="">
</iframe>
</div>
<!-- End Video Game Box -->
<!-- Game Description -->
<div class="game_description">
<h2>
<a href="http://store.steampowered.com/app/29120/" target="_blank">
Yumsters 2: Around the World
</a>
</h2>
<a href="http://kranx.com/en/" target="_blank">
KranX Productions
</a>
<p>
Not only are these Yumsters crazy for strawberries, they can rock the bongos. For the love of fruity music, help them earn money by cleaning gardens to promote their band. To really skyrocket, Yumsters need the best equipment to win the ultimate grand prize at the fairy town music showdown. Get fruitilicious in five vibrant locations of Yumsters 2, a sweet Match 3 puzzler.
</p>
<p>
Key Features:
</p>
<ul>
<li>
Match 3, drag-n-drop
</li>
<li>
Rhythm-based gameplay
</li>
<li>
Adorable characters
</li>
<li>
Win the grand prize!
</li>
</ul>
<p>
<a href="#" target="_blank">
System requirements
</a>
</p>
<p>
Operating System: Microsoft® Windows® XP/Vista
<br>
Processor: 600 Mhz
<br>
Memory: 256 MB (512+ MB recommended)
<br>
Hard Disk Space: 54 MB (or More) Available HDD Space
<br>
Video Card: DirectX® compatible with 16 MB of Video Memory
<br>
Sound Card: DirectX® compatible Sound Card
<br>
DirectX® Version: DirectX® 7.0
<br>
</p>
</div>
<!-- End Game Description -->
</div>
<!-- End Pop-Up -->
</li>
<!-- End Item -->
<li style="width: 400px;font-weight: bold; margin-top: 20px; position: relative; left: 210px; font-size: 16px;">
Price BLOCKED at
<span class="color-text">
$3.99
</span>
for the FIRST 8 HOURS
</li>
-->
</ul>
<!-- End List Game Locked -->
</div>
</section>
Perhaps I have overlooked something, but how about selecting based on direct descents of ul.unlock
? You can do this by using >
in your selector expression:
parent > child
: child elements that descend directly from parent, e.g.div.content > p
findsp
elements; andbody > *
finds the direct children of thebody
tag (source)
By using ul.unlock > li
, it should only pick out the top-level li
elements you want, e.g.:
ListIterator<Element> bundleList = indieGala.select("section.games_bundle_box2")
.get(0)
.select("ul.unlock > li")
.listIterator();
assert Iterators.size(bundleList) == 5;
I hope that helps.
You can simply look for children using this -
Elements bundleList = indieGala.select("section.games_bundle_box2").first().select("ul.unlock").first().children();
This should be faster than executing a selector and in your case will give you the exact results that you seek.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With