Utilizzando Simple_html_dom per analizzare un UL
-
28-10-2019 - |
Domanda
Vorrei ottenere il testo interiore di ogni campata in questo UL.
<ul class="alternatingList">
<li><strong>Last Played</strong><span id="ctl00_mainContent_lastPlayedLabel">04.29.2011</span></li>
<li class="alt"><strong>Armory Completion</strong><span id="ctl00_mainContent_armorCompletionLabel">52%</span></li>
<li><strong>Daily Challenges</strong><span id="ctl00_mainContent_dailyChallengesLabel">127</span></li>
<li class="alt"><strong>Weekly Challenges</strong><span id="ctl00_mainContent_weeklyChallengesLabel">4</span></li>
<li><strong>Matchmaking MP Kills</strong><span id="ctl00_mainContent_matchmakingKillsLabel">11,280 (1.18)</span></li>
<li class="alt"><strong>Matchmaking MP Medals</strong><span id="ctl00_mainContent_medalsLabel">15,383</span></li>
<li><strong>Covenant Killed</strong><span id="ctl00_mainContent_covenantKilledLabel">10,395</span></li>
<li class="alt"><strong>Player Since</strong><span id="ctl00_mainContent_playerSinceLabel">09.13.2010</span></li>
<li class="gamesPlayed"><strong>Games Played</strong><span id="ctl00_mainContent_gamesPlayedLabel">975</span></li>
</ul>
Ho questo in questo momento, ma voglio farlo senza scrivere lo stesso codice per ogni campata.
//pull last played text
$last_played = '';
$last_played_el = $html->find(".alternatingList");
if (preg_match('|<span[^>]+>(.*)</span>|U', $last_played_el[0], $matches)) {
$last_played = $matches[1];
}
echo $last_played;
Soluzione
Stai già usando un parser, perché dovresti usare un regex? Puoi accedere al testo interno di ogni cambio abbastanza facilmente:
$html = new simple_html_dom();
// Load from a string, where $raw is your UL or the page its on
$html->load($raw);
foreach($html->find('.alternatingList span')as $found) {
echo $found->innertext . "\n";
}
Altri suggerimenti
Dai un'occhiata a preg_match_all. Darà una serie di tutte le partite
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow