parent
da5fd1afb8
commit
255c085700
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,38 @@ |
||||
php-simple-html-dom-parser |
||||
========================== |
||||
|
||||
Version 1.5 |
||||
|
||||
Adaptation for Composer and PSR-0 of: |
||||
|
||||
A HTML DOM parser written in PHP5+ let you manipulate HTML in a very easy way! |
||||
Require PHP 5+. |
||||
Supports invalid HTML. |
||||
Find tags on an HTML page with selectors just like jQuery. |
||||
Extract contents from HTML in a single line. |
||||
|
||||
http://simplehtmldom.sourceforge.net/ |
||||
|
||||
|
||||
Install |
||||
------- |
||||
|
||||
composer.phar require |
||||
- package name: "sunra/php-simple-html-dom-parser": "dev-master" |
||||
|
||||
|
||||
Usage |
||||
----- |
||||
|
||||
```php |
||||
use Sunra\PhpSimple\HtmlDomParser; |
||||
|
||||
... |
||||
$dom = HtmlDomParser::str_get_html( $str ); |
||||
or |
||||
$dom = HtmlDomParser::file_get_html( $file_name ); |
||||
|
||||
$elems = $dom->find($elem_name); |
||||
... |
||||
|
||||
``` |
||||
@ -0,0 +1,20 @@ |
||||
<?php |
||||
// say me who add "О╩©" into start of file? |
||||
// Becouse of this 3 symbol before <?php - php get error |
||||
// i think it Sublime Text |
||||
|
||||
namespace Sunra\PhpSimple; |
||||
|
||||
require 'simplehtmldom_1_5'.DIRECTORY_SEPARATOR.'simple_html_dom.php'; |
||||
|
||||
class HtmlDomParser { |
||||
|
||||
static public function file_get_html() { |
||||
return call_user_func_array ( '\file_get_html' , func_get_args() ); |
||||
} |
||||
|
||||
// get html dom from string |
||||
static public function str_get_html() { |
||||
return call_user_func_array ( '\str_get_html' , func_get_args() ); |
||||
} |
||||
} |
||||
@ -0,0 +1,891 @@ |
||||
|
||||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" > |
||||
<head id="ctl00_Head1"><title> |
||||
FootballScoresLive - Previous Results |
||||
</title><meta name="Keywords" content="football,soccer,score,goals,penalty,penalties,red cards,yellow cards,results,england, |
||||
english,scotland,scottish,wales,welsh,europe,european,sms,results by sms" /><meta name="Description" content="FootballScoresLive offers continuous updates of scores from football (soccer) |
||||
matches in Britain, Europe, North and South America, and Asia, free direct to your web browser, |
||||
and by SMS to your mobile." /><link href="page.css" rel="stylesheet" type="text/css" /><link href="news.css" rel="stylesheet" type="text/css" /><link href="results.css" rel="stylesheet" type="text/css" /> |
||||
<script type="text/javascript" src="overlib.js"><!-- overLIB (c) Erik Bosrup --></script> |
||||
<script type="text/javascript" src="MMfuncs.js"></script> |
||||
<script type="text/javascript" src="swfdetect.js"></script> |
||||
<script type="text/vbscript" src="swfver.vbs"></script> |
||||
<link rel="shortcut icon" href="/favicon.ico" /><style type="text/css"> |
||||
.atlas__delta { font-family:Lucida Console; } |
||||
|
||||
</style></head> |
||||
<body onload="MM_preloadImages('images/buttons/englishNational_hl.jpg','images/buttons/englishLeagues_hl.jpg', |
||||
'images/buttons/futureFixtures_hl.jpg','images/buttons/italianLeagues_hl.jpg','images/buttons/leagueTables_hl.jpg','images/buttons/login_hl.jpg','images/buttons/favourites_hl.jpg','images/buttons/personalise_hl.jpg','images/buttons/previousResults_hl.jpg','images/buttons/scottishLeagues_hl.jpg','images/buttons/seasonTicket_hl.jpg','images/buttons/spanishLeagues_hl.jpg','images/buttons/sponsored_hl.jpg','images/buttons/supermarket_hl.jpg','images/buttons/livescores_hl.jpg')" |
||||
onunload="MM_callJS('CheckFlash();')"> |
||||
<div id="overDiv" style="position:absolute; visibility:hidden; z-index:1000;"></div> |
||||
<form name="aspnetForm" method="post" action="MatchResults.aspx" id="aspnetForm"> |
||||
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="dB6ayi9LZ+8oLEEG+Bb0EaB7S0yWNAwmwFJYNlmIPIfC1cvZYgBlKWTvoA4O9/nWx6kKCiBPFnSnfWNC5mLsqwKJAqRalzt4zBR7te1bjeJGgN0H2d1aCn3KgK2DLo6jp/xsNAQLvdqugFXdJ+7RvO58WASnJAH4vjnV2vTi6kKfuRGvNvzsfcybchbHQ+T2yUU9pTrLfSRSC6qEw00ANEJLyR8cnnsgTQhOcXFIPwCbFQEljWnQHmV6l+YMt9GeyxuhD7qL+JcVOPkqZ4TROE1TWmVLD8kOwmpEaMwINDlz/veOnNh/HVdabDznCkdFd3yzhpyyx4/mqWqp4GmkbsFyiUvZoKYin/4xf7L1Z0NfMamm3lZZMFpWz8AhmWcL99qa5kcLgjtXMzZvOKn6K/pud0lEVkvl3Kz2jXgzZPxh3qdX4Nx5anjttd6NKyF3wSlfVMk0j8zoZmja8HaqpwZZfSFnn+U7wWO6D9vzZKDJ/nxUbJHqEaLYYz+QD6zWHVfsEi3cZJlit0oOWatl8AjSHKPmFi3oD9jD3K/FiuhYFYkyk07Jpoe/6YvKgeisZaFYDQrqTTVGYul9rQRVRkUc0UVrt7TZJ/d08EXYKhWYRBx2xxQt3Yfbefr45GCComTUGOjml7DVITe9811QIXfgw5GaECa6aBi2hvYSB6gdhFlqrdqi/HK2DTcXFTyN5n749O3MgVJGSQtXP/xsTp3J1t2lOSMlz9hZYwQUDqOpaWZG2Ae8JmzhvdClyw1AxhJolgEGsutAtYhXFc16ihtjYd/JXx47zeBoB8temPCNJwpFmAN3iXV9nhu5RZ6q8hSnpfCBCn756EDnykItEhTStGovLsJG+QdRNsLE56mNtIxFxeAGrwLWJ260+QsRcvimNAERfZtow7Vx/JPMJLfXrvd1G6u0jP/uqJAQPP8WjVUUfAK5yJHi2PzzGTtFDPd7TJenlgzzyzTcPjJKib+W+CRBBboPRnro9659+79nZwYXdbHHDlQiNcBKZfYKohFHSteJRn4/XnUI2MAi+j9a5JfGs7syF7OWjvFCevTrS/toNPaPzM+muJF3/cLQA0kuM/OvaS+9Kj16BCdNfy6mPZMy6pD95xMGomu1adBwKvaTLMmjrt5Kgh5RxGrUf+pl1IoY9u8=" /> |
||||
|
||||
|
||||
<script src="/WebResource.axd?d=OSFApkHgVTFGp_WGnj5w0YyfbDgId8eejj1HHj2udCziBXq1lnucLLMhY2b4ssXravjY6R0n3Xz5xE3pKbfs7VC_WlWODN-9NNOB8qqY6cA1&t=633112977674076250" type="text/javascript"></script> |
||||
<script src="/WebResource.axd?d=OSFApkHgVTFGp_WGnj5w0YyfbDgId8eejj1HHj2udCziBXq1lnucLLMhY2b4ssXravjY6R0n3Xz5xE3pKbfs7blAzxonPUmCsga2GgPJUY41&t=633112977674076250" type="text/javascript"></script> |
||||
<div> |
||||
<table id="Table_01" width="100%" height="100%" border="0" cellpadding="0" cellspacing="0"> |
||||
<tr> |
||||
<td colspan="2" rowspan="2" width="394" height="111" > |
||||
<a href="LiveScores.aspx"> |
||||
<img src="images/fsl_logo.jpg" width="394" height="111" border="0" alt="FootballScoresLive logo" /></a></td> |
||||
<td height="81" width="100%" valign="middle" background="images/grass_top.jpg" align="center"> |
||||
<a id="ctl00_lnkScores2Mobile" title="Click here for Live Scores to your mobile" href="live-premiership-football-scores-via-sms.aspx" style="display:inline-block;"><img title="Click here for Live Scores to your mobile" src="images/scores2mobile.jpg" border="0" /></a> |
||||
</td> |
||||
<td width="174" height="81" align="center" valign="middle" background="images/grass_top.jpg"> |
||||
|
||||
<a href="Register.aspx"><img src="images/btn_reg.gif" border="0" /></a> |
||||
|
||||
</td> |
||||
</tr> |
||||
<tr style="color: yellow;"> |
||||
<td width="237" height="30" align="center" valign="middle" background="images/visitors_bg.jpg" class="body12"> |
||||
<strong> |
||||
For <span style="color: red">FREE</span> goals to your mobile</strong> |
||||
<a id="ctl00_HyperLink1" class="navlink" href="fixtures.aspx">Click Here</a></td> |
||||
<td align="center" valign="middle" bgcolor="#000000" class="body12"> |
||||
<table width=100% border="0" cellpadding="0" cellspacing="0"> |
||||
<tr style="color: white;"> |
||||
<td> |
||||
|
||||
<input type="submit" name="ctl00$LoginView5$btnLogin" value="LogIn" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$LoginView5$btnLogin", "", false, "", "login.aspx", false, false))" id="ctl00_LoginView5_btnLogin" /> |
||||
|
||||
</td> |
||||
<td> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
</td> |
||||
</tr> |
||||
<!-- |
||||
<tr> |
||||
<td height="16" colspan="4" bgcolor="#000000"> |
||||
| <a href="default.aspx" class="navlink">Home</a> |
||||
| <a href="live-premiership-football-scores-via-sms.aspx" class="navlink">SMS Service</a> |
||||
| <a href="LiveScores.aspx" class="navlink">Live Scores</a> |
||||
| <a href="MatchResults.aspx" class="navlink">Previous Results</a> |
||||
| <a href="fixtures.aspx" class="navlink">Future Fixtures</a> | |
||||
<a id="ctl00_LoginStatus2" class="navlink" href="javascript:__doPostBack('ctl00$LoginStatus2$ctl02','')">Login</a> | |
||||
<a href="login/personal.aspx" class="navlink">Personalise</a> | |
||||
|
||||
<br /> |
||||
</td> |
||||
</tr> |
||||
--> |
||||
<tr height="100%"> |
||||
<td width="174" align="center" valign="top" background="images/grass_left.jpg"> |
||||
<!-- |
||||
<a href="#" onclick='window.external.AddFavorite(location.href,document.title);' class="navlink"> |
||||
<img src="images/favourites.jpg" border="0"/></a> |
||||
--> |
||||
<br /> |
||||
<table width="100%" border="0" cellspacing="0" cellpadding="0"> |
||||
<tr> |
||||
<td> |
||||
<a href="#" onclick='window.external.AddFavorite(location.href,document.title);' class="navlink"> |
||||
<img src="images/buttons/favourites.jpg" border="0" alt="Add this page to your favourites" name="fav" width="165" height="21" onmouseover="MM_swapImage('fav','','images/buttons/favourites_hl.jpg',1)" onmouseout="MM_swapImgRestore()" /> |
||||
</a> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td><img src="images/buttons/seasonTicket.jpg" border="0" alt="Season Ticket Goal Alerts - coming soon" name="season" width="166" height="22" onmouseover="MM_swapImage('season','','images/buttons/seasonTicket_hl.jpg',1)" onmouseout="MM_swapImgRestore()" /></td> |
||||
</tr> |
||||
<tr> |
||||
<td><img src="images/buttons/mobile.jpg" border="0" alt="Mobile Goal Alerts" name="mobile" width="166" height="20" /></td> |
||||
</tr> |
||||
<tr> |
||||
<td><a href="live-premiership-football-scores-via-sms.aspx"> |
||||
<img src="images/buttons/englishLeagues.jpg" alt="English Leagues" name="engLg" width="166" height="19" border="0" onmouseover="MM_swapImage('engLg','','images/buttons/englishLeagues_hl.jpg',1)" onmouseout="MM_swapImgRestore()" /></a></td> |
||||
</tr> |
||||
<tr> |
||||
<td><img src="images/buttons/englishNational.jpg" border="0" alt="English National Team - coming soon" name="engNat" width="166" height="18" onmouseover="MM_swapImage('engNat','','images/buttons/englishNational_hl.jpg',1)" onmouseout="MM_swapImgRestore()" /></td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<a href="live-scottish-premier-league-football-scores-via-sms.aspx"> |
||||
<img src="images/buttons/scottishLeagues.jpg" border="0" alt="Scottish Leagues" name="scotLg" width="166" height="18" onmouseover="MM_swapImage('scotLg','','images/buttons/scottishLeagues_hl.jpg',1)" onmouseout="MM_swapImgRestore()" /></a></td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<a href="live-spain-football-scores-via-sms.aspx"> |
||||
<img src="images/buttons/spanishLeagues.jpg" border="0" alt="Spanish Leagues" name="spanLg" width="166" height="18" onmouseover="MM_swapImage('spanLg','','images/buttons/spanishLeagues_hl.jpg',1)" onmouseout="MM_swapImgRestore()" /></a></td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<a href="live-italy-football-scores-via-sms.aspx"> |
||||
<img src="images/buttons/italianLeagues.jpg" border="0" alt="Italian Leagues" name="italLg" width="166" height="18" onmouseover="MM_swapImage('italLg','','images/buttons/italianLeagues_hl.jpg',1)" onmouseout="MM_swapImgRestore()" /></a></td> |
||||
</tr> |
||||
<tr> |
||||
<td><a href="LiveScores.aspx"><img src="images/buttons/livescores.jpg" border="0" alt="Live Scores" name="world" width="166" height="20" onmouseover="MM_swapImage('world','','images/buttons/livescores_hl.jpg',1)" onmouseout="MM_swapImgRestore()" /></a></td> |
||||
</tr> |
||||
<tr> |
||||
<td><img src="images/buttons/supermarket.jpg" border="0" alt="Football Supermarket - coming soon" name="super" width="166" height="20" onmouseover="MM_swapImage('super','','images/buttons/supermarket_hl.jpg',1)" onmouseout="MM_swapImgRestore()" /></td> |
||||
</tr> |
||||
<tr> |
||||
<td><a href="MatchResults.aspx"><img src="images/buttons/previousResults.jpg" border="0" alt="Previous Results" name="prev" width="166" height="20" onmouseover="MM_swapImage('prev','','images/buttons/previousResults_hl.jpg',1)" onmouseout="MM_swapImgRestore()" /></a></td> |
||||
</tr> |
||||
<tr> |
||||
<td><a href="fixtures.aspx"><img src="images/buttons/futureFixtures.jpg" border="0" alt="Future Fixtures" name="future" width="166" height="20" onmouseover="MM_swapImage('future','','images/buttons/futureFixtures_hl.jpg',1)" onmouseout="MM_swapImgRestore()" /></a></td> |
||||
</tr> |
||||
<tr> |
||||
<td><img src="images/buttons/leagueTables.jpg" border="0" alt="League Tables - coming soon" name="lgTbl" width="166" height="20" onmouseover="MM_swapImage('lgTbl','','images/buttons/leagueTables_hl.jpg',1)" onmouseout="MM_swapImgRestore()" /></td> |
||||
</tr> |
||||
<tr> |
||||
<td><img src="images/buttons/sponsored.jpg" border="0" alt="Sponsored Links - coming soon" name="spons" width="166" height="20" onmouseover="MM_swapImage('spons','','images/buttons/sponsored_hl.jpg',1)" onmouseout="MM_swapImgRestore()" /></td> |
||||
</tr> |
||||
<tr> |
||||
<td> </td> |
||||
</tr> |
||||
<tr> |
||||
<td><img src="images/buttons/personalise.jpg" border="0" alt="Personalise" name="pers" width="166" height="20" onmouseover="MM_swapImage('pers','','images/buttons/personalise_hl.jpg',1)" onmouseout="MM_swapImgRestore()" /></td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<input id="ctl00_LoginStatus1" type="image" name="ctl00$LoginStatus1$ctl03" class="navlink" src="images/buttons/login.jpg" alt="Login" border="0" /> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
|
||||
<br /> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
<a href="fixtures.aspx"> |
||||
<img src="images/fsl_phone_static.jpg" width="130" height="238" border="0" /> |
||||
</a> |
||||
<div id="ctl00_FixtureSelectPanel"> |
||||
|
||||
<table border="0" cellpadding="0" cellspacing="0"> |
||||
<tr style="background-color:Black; color:Green"> |
||||
<td colspan="2"> |
||||
<img id="ctl00_Image1" src="images/fixtures.jpg" border="0" /></td> |
||||
</tr> |
||||
<tr style="background-color:White"> |
||||
<td align="left"> |
||||
<select name="ctl00$FixtureDropDown" id="ctl00_FixtureDropDown" title="Choose the date you want to see the fixtures" class="body"> |
||||
<option value="18/12/2008 00:00:00">18/12/2008</option> |
||||
<option value="19/12/2008 00:00:00">19/12/2008</option> |
||||
<option value="20/12/2008 00:00:00">20/12/2008</option> |
||||
<option value="21/12/2008 00:00:00">21/12/2008</option> |
||||
<option value="22/12/2008 00:00:00">22/12/2008</option> |
||||
<option value="23/12/2008 00:00:00">23/12/2008</option> |
||||
<option value="26/12/2008 00:00:00">26/12/2008</option> |
||||
<option value="27/12/2008 00:00:00">27/12/2008</option> |
||||
<option value="28/12/2008 00:00:00">28/12/2008</option> |
||||
<option value="29/12/2008 00:00:00">29/12/2008</option> |
||||
<option value="30/12/2008 00:00:00">30/12/2008</option> |
||||
<option value="01/01/2009 00:00:00">01/01/2009</option> |
||||
<option value="02/01/2009 00:00:00">02/01/2009</option> |
||||
|
||||
</select> |
||||
|
||||
</td> |
||||
<td align="right"> |
||||
<input type="image" name="ctl00$FixtureButton" id="ctl00_FixtureButton" title="Click to see the fixtures on your chosen date" src="images/go.gif" align="absmiddle" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$FixtureButton", "", false, "", "fixtures.aspx", false, false))" border="0" /> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
|
||||
</div> |
||||
<br /> |
||||
<div style="text-align: center"> |
||||
<table border="0" cellpadding="2" cellspacing="0"> |
||||
<tr> |
||||
<td> |
||||
<a href="live-premiership-football-scores-via-sms.aspx"> |
||||
<img src="images/flags2/england.jpg" border="0" alt="English Leagues goal alerts by SMS" /></a></td> |
||||
<td> |
||||
<a href="live-scottish-premier-league-football-scores-via-sms.aspx"> |
||||
<img src="images/flags2/scotland.jpg" border="0" alt="Scottish Leagues goal alerts by SMS" /></a></td> |
||||
<td> |
||||
<a href="live-spain-football-scores-via-sms.aspx"> |
||||
<img src="images/flags2/Spain.jpg" border="0" alt="Spanish Leagues goal alerts by SMS" /></a></td> |
||||
<td> |
||||
<a href="live-italy-football-scores-via-sms.aspx"> |
||||
<img src="images/flags2/Italy.jpg" border="0" alt="Italian Leagues goal alerts by SMS" /></a></td> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
<br /> |
||||
<img src="images/status.gif" width="110" height="127" /><br /> |
||||
<br /> |
||||
<img src="images/events.gif" width="110" height="115" /><br /> |
||||
</td> |
||||
<td width="100%" colspan="2" align="center" valign="top"> |
||||
|
||||
|
||||
<div id="ctl00_ContentPlaceHolder1_UpdatePanel1"> |
||||
|
||||
<h1>Historical Football Archive - Updated Daily!</h1> |
||||
<br /> |
||||
<p class="body12">Missed the details of your football club's latest performance? |
||||
Whether you support Manchester United or Cambridge United, Premiership club or Conference club, |
||||
you will find it all here, with our fantastic soccer library of results over the last two weeks. |
||||
These pages contain the history & detailed results package for every football game from around the world |
||||
from the last 14 match days, including not only every goal scored, but, game results, names of goal scorer, |
||||
match results, red cards and plenty more! This service is automatically updated every 24 hours, |
||||
simply select a date from the drop down menu :- |
||||
</p> |
||||
<select name="ctl00$ContentPlaceHolder1$DropDownList1" id="ctl00_ContentPlaceHolder1_DropDownList1"> |
||||
<option selected="selected" value="17/12/2008 00:00:00">Wed 17/12/2008</option> |
||||
<option value="16/12/2008 00:00:00">Tue 16/12/2008</option> |
||||
<option value="15/12/2008 00:00:00">Mon 15/12/2008</option> |
||||
<option value="14/12/2008 00:00:00">Sun 14/12/2008</option> |
||||
<option value="13/12/2008 00:00:00">Sat 13/12/2008</option> |
||||
<option value="12/12/2008 00:00:00">Fri 12/12/2008</option> |
||||
<option value="11/12/2008 00:00:00">Thu 11/12/2008</option> |
||||
<option value="10/12/2008 00:00:00">Wed 10/12/2008</option> |
||||
<option value="09/12/2008 00:00:00">Tue 09/12/2008</option> |
||||
<option value="08/12/2008 00:00:00">Mon 08/12/2008</option> |
||||
<option value="07/12/2008 00:00:00">Sun 07/12/2008</option> |
||||
<option value="06/12/2008 00:00:00">Sat 06/12/2008</option> |
||||
<option value="05/12/2008 00:00:00">Fri 05/12/2008</option> |
||||
<option value="04/12/2008 00:00:00">Thu 04/12/2008</option> |
||||
|
||||
</select> |
||||
|
||||
<br /><br /> |
||||
|
||||
|
||||
<table border="1" cellpadding="0" cellspacing="0" width="100%"> |
||||
<tr> |
||||
<td style="text-align: left" class="header"> |
||||
<span id="ctl00_ContentPlaceHolder1_Repeater1_ctl00_CompGames1_lblCompName"> SCOTLAND - DIVISION 2</span></td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div> |
||||
<table cellspacing="0" cellpadding="2" rules="all" border="1" id="ctl00_ContentPlaceHolder1_Repeater1_ctl00_CompGames1_GridView1" width="100%"> |
||||
<tr class="header" align="left"> |
||||
<th scope="col">Start</th><th scope="col">Stat</th><th scope="col">Min</th><th align="center" scope="col" width="17">R</th><th align="center" scope="col" width="17">P</th><th align="center" scope="col" width="17">O</th><th align="right" scope="col" width="30%">Home</th><th align="right" scope="col" width="10"> </th><th align="left" scope="col" width="10"> </th><th align="left" scope="col" width="30%">Away</th><th align="center" scope="col" width="17">R</th><th align="center" scope="col" width="17">P</th><th align="center" scope="col" width="17">O</th><th align="center" scope="col" width="17"><img src="images/info.gif" border="0" /></th><th scope="col" width="40%">Latest</th> |
||||
</tr><tr class="row"> |
||||
<td> |
||||
19:45 |
||||
</td><td>Pst </td><td>-</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="right">STRANRAER</td><td align="right">0</td><td align="left">0</td><td align="left">PETERHEAD</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="left"> |
||||
|
||||
</td> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
|
||||
</td> |
||||
</tr> |
||||
</table> |
||||
|
||||
<br /> |
||||
|
||||
|
||||
|
||||
<table border="1" cellpadding="0" cellspacing="0" width="100%"> |
||||
<tr> |
||||
<td style="text-align: left" class="header"> |
||||
<span id="ctl00_ContentPlaceHolder1_Repeater1_ctl01_CompGames1_lblCompName"> ENGLAND - FA TROPHY - FIRST ROUND</span></td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div> |
||||
<table cellspacing="0" cellpadding="2" rules="all" border="1" id="ctl00_ContentPlaceHolder1_Repeater1_ctl01_CompGames1_GridView1" width="100%"> |
||||
<tr class="header" align="left"> |
||||
<th scope="col">Start</th><th scope="col">Stat</th><th scope="col">Min</th><th align="center" scope="col" width="17">R</th><th align="center" scope="col" width="17">P</th><th align="center" scope="col" width="17">O</th><th align="right" scope="col" width="30%">Home</th><th align="right" scope="col" width="10"> </th><th align="left" scope="col" width="10"> </th><th align="left" scope="col" width="30%">Away</th><th align="center" scope="col" width="17">R</th><th align="center" scope="col" width="17">P</th><th align="center" scope="col" width="17">O</th><th align="center" scope="col" width="17"><img src="images/info.gif" border="0" /></th><th scope="col" width="40%">Latest</th> |
||||
</tr><tr class="row"> |
||||
<td> |
||||
19:45 |
||||
</td><td>FT </td><td>-</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="right">SWINDON SUPERMARINE</td><td align="right">1</td><td align="left">0</td><td align="left">EASTBOURNE BOROUGH</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
<a class="poplink" href="javascript:void(0);" onmouseover="return overlib('<table border=0 cellpadding=2 cellspacing=0 width=250><tr align=left bgcolor=#ffffff><td><img src=\'images/info.gif\' /><b>Match information</b></td></tr><tr><td>Replayed if draw.</td></tr></table>',HAUTO,VAUTO,WIDTH,250);" onmouseout="return nd();"><img src="images/info.gif" border="0" /></a> |
||||
</td><td align="left"> |
||||
<a class="poplink" href="javascript:void(0);" onmouseover="return overlib('<table><tr valign=top><td width=200><table border=1 cellspacing=0 cellpadding=2><tr valign=top><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr><tr><td>74</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>EDENBOROUGH</td></tr></table></td><td width=200><table border=1 cellspacing=0 cellpadding=2><tr><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr></table></td></tr></table>',HAUTO,VAUTO,WIDTH,400);" onmouseout="return nd();">74<img align="top" width="17" height="16" border="0" src="images/ball.gif" alt="goal">EDENBOROUGH</a> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
|
||||
</td> |
||||
</tr> |
||||
</table> |
||||
|
||||
<br /> |
||||
|
||||
|
||||
|
||||
<table border="1" cellpadding="0" cellspacing="0" width="100%"> |
||||
<tr> |
||||
<td style="text-align: left" class="header"> |
||||
<span id="ctl00_ContentPlaceHolder1_Repeater1_ctl02_CompGames1_lblCompName"> EUROPE (UEFA) - UEFA CUP - GROUP STAGE</span></td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div> |
||||
<table cellspacing="0" cellpadding="2" rules="all" border="1" id="ctl00_ContentPlaceHolder1_Repeater1_ctl02_CompGames1_GridView1" width="100%"> |
||||
<tr class="header" align="left"> |
||||
<th scope="col">Start</th><th scope="col">Stat</th><th scope="col">Min</th><th align="center" scope="col" width="17">R</th><th align="center" scope="col" width="17">P</th><th align="center" scope="col" width="17">O</th><th align="right" scope="col" width="30%">Home</th><th align="right" scope="col" width="10"> </th><th align="left" scope="col" width="10"> </th><th align="left" scope="col" width="30%">Away</th><th align="center" scope="col" width="17">R</th><th align="center" scope="col" width="17">P</th><th align="center" scope="col" width="17">O</th><th align="center" scope="col" width="17"><img src="images/info.gif" border="0" /></th><th scope="col" width="40%">Latest</th> |
||||
</tr><tr class="row"> |
||||
<td> |
||||
19:45 |
||||
</td><td>FT </td><td>-</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="right">AC MILAN</td><td align="right">2</td><td align="left">2</td><td align="left">VfL WOLFSBURG</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="left"> |
||||
<a class="poplink" href="javascript:void(0);" onmouseover="return overlib('<table><tr valign=top><td width=200><table border=1 cellspacing=0 cellpadding=2><tr valign=top><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr><tr><td>17</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>AMBROSINI</td></tr><tr><td>56</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>PATO</td></tr></table></td><td width=200><table border=1 cellspacing=0 cellpadding=2><tr><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr><tr><td>55</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>ZACCARDO</td></tr><tr><td>81</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>SAGLIK</td></tr></table></td></tr></table>',HAUTO,VAUTO,WIDTH,400);" onmouseout="return nd();">81<img align="top" width="17" height="16" border="0" src="images/ball.gif" alt="goal">SAGLIK</a> |
||||
</td> |
||||
</tr><tr class="row_alt"> |
||||
<td> |
||||
19:45 |
||||
</td><td>FT </td><td>-</td><td> |
||||
|
||||
</td><td bgcolor="Red"> |
||||
1 |
||||
</td><td> |
||||
|
||||
</td><td align="right">AJAX</td><td align="right">2</td><td align="left">2</td><td align="left">SLAVIA PRAHA</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="left"> |
||||
<a class="poplink" href="javascript:void(0);" onmouseover="return overlib('<table><tr valign=top><td width=200><table border=1 cellspacing=0 cellpadding=2><tr valign=top><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr><tr><td>4</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>VERTONGHEN</td></tr><tr><td>90</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball-pen.gif\' alt=\'penalty\'></td><td nowrap=nowrap>SUAREZ</td></tr></table></td><td width=200><table border=1 cellspacing=0 cellpadding=2><tr><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr><tr><td>13</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>CERNY</td></tr><tr><td>41</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>JAROLIM</td></tr></table></td></tr></table>',HAUTO,VAUTO,WIDTH,400);" onmouseout="return nd();">90<img align="top" width="17" height="16" border="0" src="images/ball-pen.gif" alt="penalty">SUAREZ</a> |
||||
</td> |
||||
</tr><tr class="row"> |
||||
<td> |
||||
19:45 |
||||
</td><td>FT </td><td>-</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="right">CLUB BRUGGE</td><td align="right">0</td><td align="left">1</td><td align="left">FC COPENHAGEN</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="left"> |
||||
<a class="poplink" href="javascript:void(0);" onmouseover="return overlib('<table><tr valign=top><td width=200><table border=1 cellspacing=0 cellpadding=2><tr valign=top><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr></table></td><td width=200><table border=1 cellspacing=0 cellpadding=2><tr><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr><tr><td>58</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>SANTIN</td></tr></table></td></tr></table>',HAUTO,VAUTO,WIDTH,400);" onmouseout="return nd();">58<img align="top" width="17" height="16" border="0" src="images/ball.gif" alt="goal">SANTIN</a> |
||||
</td> |
||||
</tr><tr class="row_alt"> |
||||
<td> |
||||
19:45 |
||||
</td><td>FT </td><td>-</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="right">DEP. LA CORUNA</td><td align="right">1</td><td align="left">0</td><td align="left">NANCY</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="left"> |
||||
<a class="poplink" href="javascript:void(0);" onmouseover="return overlib('<table><tr valign=top><td width=200><table border=1 cellspacing=0 cellpadding=2><tr valign=top><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr><tr><td>74</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>BODIPO</td></tr></table></td><td width=200><table border=1 cellspacing=0 cellpadding=2><tr><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr></table></td></tr></table>',HAUTO,VAUTO,WIDTH,400);" onmouseout="return nd();">74<img align="top" width="17" height="16" border="0" src="images/ball.gif" alt="goal">BODIPO</a> |
||||
</td> |
||||
</tr><tr class="row"> |
||||
<td> |
||||
19:45 |
||||
</td><td>FT </td><td>-</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="right">FEYENOORD</td><td align="right">0</td><td align="left">1</td><td align="left">LECH POZNAN</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="left"> |
||||
<a class="poplink" href="javascript:void(0);" onmouseover="return overlib('<table><tr valign=top><td width=200><table border=1 cellspacing=0 cellpadding=2><tr valign=top><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr></table></td><td width=200><table border=1 cellspacing=0 cellpadding=2><tr><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr><tr><td>26</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>DJURDJEVIC</td></tr></table></td></tr></table>',HAUTO,VAUTO,WIDTH,400);" onmouseout="return nd();">26<img align="top" width="17" height="16" border="0" src="images/ball.gif" alt="goal">DJURDJEVIC</a> |
||||
</td> |
||||
</tr><tr class="row_alt"> |
||||
<td> |
||||
19:45 |
||||
</td><td>FT </td><td>-</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="right">HAMBURGER SV</td><td align="right">3</td><td align="left">1</td><td align="left">ASTON VILLA</td><td bgcolor="Red"> |
||||
1 |
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="left"> |
||||
<a class="poplink" href="javascript:void(0);" onmouseover="return overlib('<table><tr valign=top><td width=200><table border=1 cellspacing=0 cellpadding=2><tr valign=top><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr><tr><td>18</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>PETRIC</td></tr><tr><td>30</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>OLIC</td></tr><tr><td>57</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>OLIC</td></tr></table></td><td width=200><table border=1 cellspacing=0 cellpadding=2><tr><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr><tr><td>82</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>DELFOUNESO</td></tr><tr><td>84</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/redcard.gif\' alt=\'red card\'></td><td nowrap=nowrap>SIDWELL</td></tr></table></td></tr></table>',HAUTO,VAUTO,WIDTH,400);" onmouseout="return nd();">84<img align="top" width="17" height="16" border="0" src="images/redcard.gif" alt="red card">SIDWELL</a> |
||||
</td> |
||||
</tr><tr class="row"> |
||||
<td> |
||||
19:45 |
||||
</td><td>FT </td><td>-</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="right">PORTSMOUTH</td><td align="right">3</td><td align="left">0</td><td align="left">HEERENVEEN</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="left"> |
||||
<a class="poplink" href="javascript:void(0);" onmouseover="return overlib('<table><tr valign=top><td width=200><table border=1 cellspacing=0 cellpadding=2><tr valign=top><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr><tr><td>40</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>CROUCH</td></tr><tr><td>42</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>CROUCH</td></tr><tr><td>90</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>HREIDARSSON</td></tr></table></td><td width=200><table border=1 cellspacing=0 cellpadding=2><tr><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr></table></td></tr></table>',HAUTO,VAUTO,WIDTH,400);" onmouseout="return nd();">90<img align="top" width="17" height="16" border="0" src="images/ball.gif" alt="goal">HREIDARSSON</a> |
||||
</td> |
||||
</tr><tr class="row_alt"> |
||||
<td> |
||||
19:45 |
||||
</td><td>FT </td><td>-</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="right">ST ETIENNE</td><td align="right">2</td><td align="left">2</td><td align="left">VALENCIA</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="left"> |
||||
<a class="poplink" href="javascript:void(0);" onmouseover="return overlib('<table><tr valign=top><td width=200><table border=1 cellspacing=0 cellpadding=2><tr valign=top><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr><tr><td>29</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>ILAN</td></tr><tr><td>44</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>ILAN</td></tr></table></td><td width=200><table border=1 cellspacing=0 cellpadding=2><tr><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr><tr><td>33</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>MORIENTES</td></tr><tr><td>72</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>ZIGIC</td></tr></table></td></tr></table>',HAUTO,VAUTO,WIDTH,400);" onmouseout="return nd();">72<img align="top" width="17" height="16" border="0" src="images/ball.gif" alt="goal">ZIGIC</a> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
|
||||
</td> |
||||
</tr> |
||||
</table> |
||||
|
||||
<br /> |
||||
|
||||
|
||||
|
||||
<table border="1" cellpadding="0" cellspacing="0" width="100%"> |
||||
<tr> |
||||
<td style="text-align: left" class="header"> |
||||
<span id="ctl00_ContentPlaceHolder1_Repeater1_ctl03_CompGames1_lblCompName"> INTERNATIONAL TOURNAMENTS - OMAN FOUR NATIONS TOUR</span></td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div> |
||||
<table cellspacing="0" cellpadding="2" rules="all" border="1" id="ctl00_ContentPlaceHolder1_Repeater1_ctl03_CompGames1_GridView1" width="100%"> |
||||
<tr class="header" align="left"> |
||||
<th scope="col">Start</th><th scope="col">Stat</th><th scope="col">Min</th><th align="center" scope="col" width="17">R</th><th align="center" scope="col" width="17">P</th><th align="center" scope="col" width="17">O</th><th align="right" scope="col" width="30%">Home</th><th align="right" scope="col" width="10"> </th><th align="left" scope="col" width="10"> </th><th align="left" scope="col" width="30%">Away</th><th align="center" scope="col" width="17">R</th><th align="center" scope="col" width="17">P</th><th align="center" scope="col" width="17">O</th><th align="center" scope="col" width="17"><img src="images/info.gif" border="0" /></th><th scope="col" width="40%">Latest</th> |
||||
</tr><tr class="row"> |
||||
<td> |
||||
14:00 |
||||
</td><td>FT </td><td>-</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="right">OMAN</td><td align="right">3</td><td align="left">1</td><td align="left">CHINA</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
<a class="poplink" href="javascript:void(0);" onmouseover="return overlib('<table border=0 cellpadding=2 cellspacing=0 width=250><tr align=left bgcolor=#ffffff><td><img src=\'images/info.gif\' /><b>Match information</b></td></tr><tr><td>Knock out.</td></tr></table>',HAUTO,VAUTO,WIDTH,250);" onmouseout="return nd();"><img src="images/info.gif" border="0" /></a> |
||||
</td><td align="left"> |
||||
<a class="poplink" href="javascript:void(0);" onmouseover="return overlib('<table><tr valign=top><td width=200><table border=1 cellspacing=0 cellpadding=2><tr valign=top><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr><tr><td>47</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>BASHEER</td></tr><tr><td>74</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>SALEH</td></tr><tr><td>84</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>SALEH</td></tr></table></td><td width=200><table border=1 cellspacing=0 cellpadding=2><tr><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr><tr><td>53</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>BO</td></tr></table></td></tr></table>',HAUTO,VAUTO,WIDTH,400);" onmouseout="return nd();">84<img align="top" width="17" height="16" border="0" src="images/ball.gif" alt="goal">SALEH</a> |
||||
</td> |
||||
</tr><tr class="row_alt"> |
||||
<td> |
||||
16:30 |
||||
</td><td>FT </td><td>-</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="right">ECUADOR</td><td align="right">1</td><td align="left">0</td><td align="left">IRAN</td><td bgcolor="Red"> |
||||
1 |
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
<a class="poplink" href="javascript:void(0);" onmouseover="return overlib('<table border=0 cellpadding=2 cellspacing=0 width=250><tr align=left bgcolor=#ffffff><td><img src=\'images/info.gif\' /><b>Match information</b></td></tr><tr><td>Knock out.</td></tr></table>',HAUTO,VAUTO,WIDTH,250);" onmouseout="return nd();"><img src="images/info.gif" border="0" /></a> |
||||
</td><td align="left"> |
||||
<a class="poplink" href="javascript:void(0);" onmouseover="return overlib('<table><tr valign=top><td width=200><table border=1 cellspacing=0 cellpadding=2><tr valign=top><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr><tr><td>55</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>MARTINEZ</td></tr></table></td><td width=200><table border=1 cellspacing=0 cellpadding=2><tr><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr><tr><td>90</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/redcard.gif\' alt=\'red card\'></td><td nowrap=nowrap>NEJAD</td></tr></table></td></tr></table>',HAUTO,VAUTO,WIDTH,400);" onmouseout="return nd();">90<img align="top" width="17" height="16" border="0" src="images/redcard.gif" alt="red card">NEJAD</a> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
|
||||
</td> |
||||
</tr> |
||||
</table> |
||||
|
||||
<br /> |
||||
|
||||
|
||||
|
||||
<table border="1" cellpadding="0" cellspacing="0" width="100%"> |
||||
<tr> |
||||
<td style="text-align: left" class="header"> |
||||
<span id="ctl00_ContentPlaceHolder1_Repeater1_ctl04_CompGames1_lblCompName"> ITALY - FA CUP - ROUND 16</span></td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div> |
||||
<table cellspacing="0" cellpadding="2" rules="all" border="1" id="ctl00_ContentPlaceHolder1_Repeater1_ctl04_CompGames1_GridView1" width="100%"> |
||||
<tr class="header" align="left"> |
||||
<th scope="col">Start</th><th scope="col">Stat</th><th scope="col">Min</th><th align="center" scope="col" width="17">R</th><th align="center" scope="col" width="17">P</th><th align="center" scope="col" width="17">O</th><th align="right" scope="col" width="30%">Home</th><th align="right" scope="col" width="10"> </th><th align="left" scope="col" width="10"> </th><th align="left" scope="col" width="30%">Away</th><th align="center" scope="col" width="17">R</th><th align="center" scope="col" width="17">P</th><th align="center" scope="col" width="17">O</th><th align="center" scope="col" width="17"><img src="images/info.gif" border="0" /></th><th scope="col" width="40%">Latest</th> |
||||
</tr><tr class="row"> |
||||
<td> |
||||
16:00 |
||||
</td><td>FT </td><td>-</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="right">FIORENTINA</td><td align="right">0</td><td align="left">1</td><td align="left">TORINO</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
<a class="poplink" href="javascript:void(0);" onmouseover="return overlib('<table border=0 cellpadding=2 cellspacing=0 width=250><tr align=left bgcolor=#ffffff><td><img src=\'images/info.gif\' /><b>Match information</b></td></tr><tr><td>Knock out.</td></tr></table>',HAUTO,VAUTO,WIDTH,250);" onmouseout="return nd();"><img src="images/info.gif" border="0" /></a> |
||||
</td><td align="left"> |
||||
<a class="poplink" href="javascript:void(0);" onmouseover="return overlib('<table><tr valign=top><td width=200><table border=1 cellspacing=0 cellpadding=2><tr valign=top><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr></table></td><td width=200><table border=1 cellspacing=0 cellpadding=2><tr><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr><tr><td>19</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>BIANCHI</td></tr></table></td></tr></table>',HAUTO,VAUTO,WIDTH,400);" onmouseout="return nd();">19<img align="top" width="17" height="16" border="0" src="images/ball.gif" alt="goal">BIANCHI</a> |
||||
</td> |
||||
</tr><tr class="row_alt"> |
||||
<td> |
||||
20:00 |
||||
</td><td>FT </td><td>-</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="right">ROMA</td><td align="right">2</td><td align="left">0</td><td align="left">BOLOGNA</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
<a class="poplink" href="javascript:void(0);" onmouseover="return overlib('<table border=0 cellpadding=2 cellspacing=0 width=250><tr align=left bgcolor=#ffffff><td><img src=\'images/info.gif\' /><b>Match information</b></td></tr><tr><td>Knock out.</td></tr></table>',HAUTO,VAUTO,WIDTH,250);" onmouseout="return nd();"><img src="images/info.gif" border="0" /></a> |
||||
</td><td align="left"> |
||||
<a class="poplink" href="javascript:void(0);" onmouseover="return overlib('<table><tr valign=top><td width=200><table border=1 cellspacing=0 cellpadding=2><tr valign=top><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr><tr><td>82</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>VUCINIC</td></tr><tr><td>86</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>VUCINIC</td></tr></table></td><td width=200><table border=1 cellspacing=0 cellpadding=2><tr><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr></table></td></tr></table>',HAUTO,VAUTO,WIDTH,400);" onmouseout="return nd();">86<img align="top" width="17" height="16" border="0" src="images/ball.gif" alt="goal">VUCINIC</a> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
|
||||
</td> |
||||
</tr> |
||||
</table> |
||||
|
||||
<br /> |
||||
|
||||
|
||||
|
||||
<table border="1" cellpadding="0" cellspacing="0" width="100%"> |
||||
<tr> |
||||
<td style="text-align: left" class="header"> |
||||
<span id="ctl00_ContentPlaceHolder1_Repeater1_ctl05_CompGames1_lblCompName"> ITALY - SERIE C1A</span></td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div> |
||||
<table cellspacing="0" cellpadding="2" rules="all" border="1" id="ctl00_ContentPlaceHolder1_Repeater1_ctl05_CompGames1_GridView1" width="100%"> |
||||
<tr class="header" align="left"> |
||||
<th scope="col">Start</th><th scope="col">Stat</th><th scope="col">Min</th><th align="center" scope="col" width="17">R</th><th align="center" scope="col" width="17">P</th><th align="center" scope="col" width="17">O</th><th align="right" scope="col" width="30%">Home</th><th align="right" scope="col" width="10"> </th><th align="left" scope="col" width="10"> </th><th align="left" scope="col" width="30%">Away</th><th align="center" scope="col" width="17">R</th><th align="center" scope="col" width="17">P</th><th align="center" scope="col" width="17">O</th><th align="center" scope="col" width="17"><img src="images/info.gif" border="0" /></th><th scope="col" width="40%">Latest</th> |
||||
</tr><tr class="row"> |
||||
<td> |
||||
13:30 |
||||
</td><td>FT </td><td>-</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="right">PRO SESTO</td><td align="right">0</td><td align="left">0</td><td align="left">LECCO</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="left"> |
||||
|
||||
</td> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
|
||||
</td> |
||||
</tr> |
||||
</table> |
||||
|
||||
<br /> |
||||
|
||||
|
||||
|
||||
<table border="1" cellpadding="0" cellspacing="0" width="100%"> |
||||
<tr> |
||||
<td style="text-align: left" class="header"> |
||||
<span id="ctl00_ContentPlaceHolder1_Repeater1_ctl06_CompGames1_lblCompName"> ITALY - SERIE C2A</span></td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div> |
||||
<table cellspacing="0" cellpadding="2" rules="all" border="1" id="ctl00_ContentPlaceHolder1_Repeater1_ctl06_CompGames1_GridView1" width="100%"> |
||||
<tr class="header" align="left"> |
||||
<th scope="col">Start</th><th scope="col">Stat</th><th scope="col">Min</th><th align="center" scope="col" width="17">R</th><th align="center" scope="col" width="17">P</th><th align="center" scope="col" width="17">O</th><th align="right" scope="col" width="30%">Home</th><th align="right" scope="col" width="10"> </th><th align="left" scope="col" width="10"> </th><th align="left" scope="col" width="30%">Away</th><th align="center" scope="col" width="17">R</th><th align="center" scope="col" width="17">P</th><th align="center" scope="col" width="17">O</th><th align="center" scope="col" width="17"><img src="images/info.gif" border="0" /></th><th scope="col" width="40%">Latest</th> |
||||
</tr><tr class="row"> |
||||
<td> |
||||
13:30 |
||||
</td><td>FT </td><td>-</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="right">MEZZOCORONA</td><td align="right">1</td><td align="left">3</td><td align="left">SAMBONIFACESE</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="left"> |
||||
<a class="poplink" href="javascript:void(0);" onmouseover="return overlib('<table><tr valign=top><td width=200><table border=1 cellspacing=0 cellpadding=2><tr valign=top><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr><tr><td>55</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap> </td></tr></table></td><td width=200><table border=1 cellspacing=0 cellpadding=2><tr><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr><tr><td>48</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap> </td></tr><tr><td>66</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap> </td></tr><tr><td>74</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap> </td></tr></table></td></tr></table>',HAUTO,VAUTO,WIDTH,400);" onmouseout="return nd();">74<img align="top" width="17" height="16" border="0" src="images/ball.gif" alt="goal"> </a> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
|
||||
</td> |
||||
</tr> |
||||
</table> |
||||
|
||||
<br /> |
||||
|
||||
|
||||
|
||||
<table border="1" cellpadding="0" cellspacing="0" width="100%"> |
||||
<tr> |
||||
<td style="text-align: left" class="header"> |
||||
<span id="ctl00_ContentPlaceHolder1_Repeater1_ctl07_CompGames1_lblCompName"> SCOTLAND - FA CUP - THIRD ROUND</span></td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div> |
||||
<table cellspacing="0" cellpadding="2" rules="all" border="1" id="ctl00_ContentPlaceHolder1_Repeater1_ctl07_CompGames1_GridView1" width="100%"> |
||||
<tr class="header" align="left"> |
||||
<th scope="col">Start</th><th scope="col">Stat</th><th scope="col">Min</th><th align="center" scope="col" width="17">R</th><th align="center" scope="col" width="17">P</th><th align="center" scope="col" width="17">O</th><th align="right" scope="col" width="30%">Home</th><th align="right" scope="col" width="10"> </th><th align="left" scope="col" width="10"> </th><th align="left" scope="col" width="30%">Away</th><th align="center" scope="col" width="17">R</th><th align="center" scope="col" width="17">P</th><th align="center" scope="col" width="17">O</th><th align="center" scope="col" width="17"><img src="images/info.gif" border="0" /></th><th scope="col" width="40%">Latest</th> |
||||
</tr><tr class="row"> |
||||
<td> |
||||
13:30 |
||||
</td><td>FT </td><td>-</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="right">LOCHEE UTD</td><td align="right">1</td><td align="left">1</td><td align="left">AYR UTD</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
<a class="poplink" href="javascript:void(0);" onmouseover="return overlib('<table border=0 cellpadding=2 cellspacing=0 width=250><tr align=left bgcolor=#ffffff><td><img src=\'images/info.gif\' /><b>Match information</b></td></tr><tr><td>Replayed if draw.</td></tr></table>',HAUTO,VAUTO,WIDTH,250);" onmouseout="return nd();"><img src="images/info.gif" border="0" /></a> |
||||
</td><td align="left"> |
||||
<a class="poplink" href="javascript:void(0);" onmouseover="return overlib('<table><tr valign=top><td width=200><table border=1 cellspacing=0 cellpadding=2><tr valign=top><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr><tr><td>86</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>HAGAN</td></tr></table></td><td width=200><table border=1 cellspacing=0 cellpadding=2><tr><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr><tr><td>60</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>WILLIAMS</td></tr></table></td></tr></table>',HAUTO,VAUTO,WIDTH,400);" onmouseout="return nd();">86<img align="top" width="17" height="16" border="0" src="images/ball.gif" alt="goal">HAGAN</a> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
|
||||
</td> |
||||
</tr> |
||||
</table> |
||||
|
||||
<br /> |
||||
|
||||
|
||||
|
||||
<table border="1" cellpadding="0" cellspacing="0" width="100%"> |
||||
<tr> |
||||
<td style="text-align: left" class="header"> |
||||
<span id="ctl00_ContentPlaceHolder1_Repeater1_ctl08_CompGames1_lblCompName"> WORLD (FIFA) - FIFA CLUB WORLD CHAMPIONSHIP - SEMI</span></td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div> |
||||
<table cellspacing="0" cellpadding="2" rules="all" border="1" id="ctl00_ContentPlaceHolder1_Repeater1_ctl08_CompGames1_GridView1" width="100%"> |
||||
<tr class="header" align="left"> |
||||
<th scope="col">Start</th><th scope="col">Stat</th><th scope="col">Min</th><th align="center" scope="col" width="17">R</th><th align="center" scope="col" width="17">P</th><th align="center" scope="col" width="17">O</th><th align="right" scope="col" width="30%">Home</th><th align="right" scope="col" width="10"> </th><th align="left" scope="col" width="10"> </th><th align="left" scope="col" width="30%">Away</th><th align="center" scope="col" width="17">R</th><th align="center" scope="col" width="17">P</th><th align="center" scope="col" width="17">O</th><th align="center" scope="col" width="17"><img src="images/info.gif" border="0" /></th><th scope="col" width="40%">Latest</th> |
||||
</tr><tr class="row"> |
||||
<td> |
||||
10:30 |
||||
</td><td>FT </td><td>-</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td align="right">PACHUCA (MEX)</td><td align="right">0</td><td align="left">2</td><td align="left">LIGA D.U. QUITO(ECU)</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
|
||||
</td><td> |
||||
<a class="poplink" href="javascript:void(0);" onmouseover="return overlib('<table border=0 cellpadding=2 cellspacing=0 width=250><tr align=left bgcolor=#ffffff><td><img src=\'images/info.gif\' /><b>Match information</b></td></tr><tr><td>Playing at Tokyo, Japan. Knock out.</td></tr></table>',HAUTO,VAUTO,WIDTH,250);" onmouseout="return nd();"><img src="images/info.gif" border="0" /></a> |
||||
</td><td align="left"> |
||||
<a class="poplink" href="javascript:void(0);" onmouseover="return overlib('<table><tr valign=top><td width=200><table border=1 cellspacing=0 cellpadding=2><tr valign=top><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr></table></td><td width=200><table border=1 cellspacing=0 cellpadding=2><tr><td width=20>Min</td><td width=20> </td><td width=120>Player</td></tr><tr><td>4</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>BIELER</td></tr><tr><td>26</td><td><img align=\'top\' width=\'17\' height=\'16\' border=\'0\' src=\'images/ball.gif\' alt=\'goal\'></td><td nowrap=nowrap>BOLANOS</td></tr></table></td></tr></table>',HAUTO,VAUTO,WIDTH,400);" onmouseout="return nd();">26<img align="top" width="17" height="16" border="0" src="images/ball.gif" alt="goal">BOLANOS</a> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
|
||||
</td> |
||||
</tr> |
||||
</table> |
||||
|
||||
<br /> |
||||
|
||||
|
||||
|
||||
|
||||
</div> |
||||
<table border="0" cellpadding="5" cellspacing="0" style="width: 100%; height: 100%"> |
||||
<tr class="newslinkspace"> |
||||
<td style="width: 100%"> |
||||
View complete <a href="ResultsArchive.aspx" class="newslink">archive of FootballScoresLive.com Match Results</a> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
|
||||
</td> |
||||
<td width="125" align="right" valign="top"> |
||||
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="120" height="600"> |
||||
<param name="movie" value="http://www.footballscoreslive.com/images/fslSMSNew.swf" /> |
||||
<param name="quality" value="high" /> |
||||
<embed src="http://www.footballscoreslive.com/images/fslSMSNew.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="120" height="600"></embed> |
||||
</object> |
||||
<script type="text/javascript"><!-- |
||||
google_ad_client = "pub-1398285862595543"; |
||||
google_ad_width = 120; |
||||
google_ad_height = 600; |
||||
google_ad_format = "120x600_as"; |
||||
google_ad_type = "text_image"; |
||||
google_ad_channel =""; |
||||
google_color_border = "336699"; |
||||
google_color_bg = "FFFFFF"; |
||||
google_color_link = "0000FF"; |
||||
google_color_text = "000000"; |
||||
google_color_url = "008000"; |
||||
//--></script> |
||||
<script type="text/javascript" |
||||
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> |
||||
</script> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<img src="images/spacer.gif" width="174" height="1" alt="" /></td> |
||||
<td> |
||||
<img src="images/spacer.gif" width="220" height="1" alt="" /></td> |
||||
<td> |
||||
<img src="images/spacer.gif" width="281" height="1" alt="" /></td> |
||||
<td> |
||||
<img src="images/spacer.gif" width="125" height="1" alt="" /></td> |
||||
</tr> |
||||
<tr> |
||||
<td height="16" colspan="4" bgcolor="#000000"> |
||||
| |
||||
<a class="navlink" href="disclaimer.aspx">Disclaimer</a> | |
||||
<a class="navlink" href="privacy.aspx">Privacy</a> | |
||||
<a href="aboutus.aspx" class="navlink">About Us</a> | |
||||
<a href="NewsArchive.aspx" class="navlink">News Archive</a> | |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
|
||||
</div> |
||||
|
||||
<input type="hidden" name="__PREVIOUSPAGE" id="__PREVIOUSPAGE" value="Xh65BZM36Ruds-iXM2l7LB-dXtc__8RpYzxQLE4V_YQ1" /> |
||||
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="2ybQ+H9cPYUzPPi/5ComPVhU+jAYPdxVR+fOu2ZZbs2RxuAweOrbEg/qP5f+1OYLQI+oQJb98YQDTTMw+x86m7Np3/NYQHDjzX76RjJfW9nS6SnJVUi1nLHSh9c7wgfVB7UNjywCsU0hiMY1IUsYkR/rClTQE4j3Q4a4ub3Cqrn+b7fY3itatSObxb3L0Pq9E9vx/RpYI3jhA2RPCnO1WEQF2kEBAba5qqLwESWolSSdLqs5DRta8kholg0zw5EA5/R9+XiPqWwbk4n/TnTtdMwQq2iExD4eyjsLsE7bWnw=" /> |
||||
<script type="text/xml-script"> |
||||
<page xmlns:script="http://schemas.microsoft.com/xml-script/2005"> |
||||
<components> |
||||
<pageRequestManager id="_PageRequestManager" updatePanelIDs="ctl00$ContentPlaceHolder1$UpdatePanel1" asyncPostbackControlIDs="ctl00_ContentPlaceHolder1_DropDownList1" scriptManagerID="ctl00$ContentPlaceHolder1$ScriptManager1" form="aspnetForm" /> |
||||
</components> |
||||
</page></script> |
||||
<script type="text/javascript"> |
||||
</script> |
||||
</form> |
||||
</body> |
||||
</html> |
||||
@ -0,0 +1,144 @@ |
||||
<?php |
||||
error_reporting(E_ALL); |
||||
include_once('../simple_html_dom.php'); |
||||
|
||||
$html = file_get_html('google.htm'); |
||||
//$html = file_get_html('youtube.htm'); |
||||
//$html = file_get_html('Product.ibatis.xml'); |
||||
|
||||
|
||||
$lang = ''; |
||||
$l=$html->find('html', 0); |
||||
if ($l!==null) |
||||
$lang = $l->lang; |
||||
if ($lang!='') |
||||
$lang = 'lang="'.$lang.'"'; |
||||
|
||||
$charset = $html->find('meta[http-equiv*=content-type]', 0); |
||||
$target = array(); |
||||
$query = ''; |
||||
|
||||
if (isset($_REQUEST['query'])) { |
||||
$query = $_REQUEST['query']; |
||||
$target = $html->find($query); |
||||
} |
||||
|
||||
function stat_dom($dom) { |
||||
$count_text = 0; |
||||
$count_comm = 0; |
||||
$count_elem = 0; |
||||
$count_tag_end = 0; |
||||
$count_unknown = 0; |
||||
|
||||
foreach($dom->nodes as $n) { |
||||
if ($n->nodetype==HDOM_TYPE_TEXT) |
||||
++$count_text; |
||||
if ($n->nodetype==HDOM_TYPE_COMMENT) |
||||
++$count_comm; |
||||
if ($n->nodetype==HDOM_TYPE_ELEMENT) |
||||
++$count_elem; |
||||
if ($n->nodetype==HDOM_TYPE_ENDTAG) |
||||
++$count_tag_end; |
||||
if ($n->nodetype==HDOM_TYPE_UNKNOWN) |
||||
++$count_unknown; |
||||
} |
||||
|
||||
echo 'Total: '. count($dom->nodes). |
||||
', Text: '.$count_text. |
||||
', Commnet: '.$count_comm. |
||||
', Tag: '.$count_elem. |
||||
', End Tag: '.$count_tag_end. |
||||
', Unknown: '.$count_unknown; |
||||
} |
||||
|
||||
function dump_my_html_tree($node, $show_attr=true, $deep=0, $last=true) { |
||||
$count = count($node->nodes); |
||||
if ($count>0) { |
||||
if($last) |
||||
echo '<li class="expandable lastExpandable"><div class="hitarea expandable-hitarea lastExpandable-hitarea"></div><<span class="tag">'.htmlspecialchars($node->tag).'</span>'; |
||||
else |
||||
echo '<li class="expandable"><div class="hitarea expandable-hitarea"></div><<span class="tag">'.htmlspecialchars($node->tag).'</span>'; |
||||
} |
||||
else { |
||||
$laststr = ($last===false) ? '' : ' class="last"'; |
||||
echo '<li'.$laststr.'><<span class="tag">'.htmlspecialchars($node->tag).'</span>'; |
||||
} |
||||
|
||||
if ($show_attr) { |
||||
foreach($node->attr as $k=>$v) { |
||||
echo ' '.htmlspecialchars($k).'="<span class="attr">'.htmlspecialchars($node->$k).'</span>"'; |
||||
} |
||||
} |
||||
echo '>'; |
||||
|
||||
if ($node->tag==='text' || $node->tag==='comment') { |
||||
echo htmlspecialchars($node->innertext); |
||||
return; |
||||
} |
||||
|
||||
if ($count>0) echo "\n<ul style=\"display: none;\">\n"; |
||||
$i=0; |
||||
foreach($node->nodes as $c) { |
||||
$last = (++$i==$count) ? true : false; |
||||
dump_my_html_tree($c, $show_attr, $deep+1, $last); |
||||
} |
||||
if ($count>0) |
||||
echo "</ul>\n"; |
||||
|
||||
//if ($count>0) echo '</<span class="attr">'.htmlspecialchars($node->tag).'</span>>'; |
||||
echo "</li>\n"; |
||||
} |
||||
?> |
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
||||
|
||||
<html <?=$lang?>>
|
||||
<head> |
||||
<? |
||||
if ($lang!='') |
||||
echo '<meta http-equiv="content-type" content="text/html; charset=utf-8"/>'; |
||||
else if ($charset) |
||||
echo $charset; |
||||
else |
||||
echo '<meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>'; |
||||
?> |
||||
<title>Simple HTML DOM Query Test</title> |
||||
<link rel="stylesheet" href="js/jquery.treeview.css" /> |
||||
<link rel="stylesheet" href="js/screen.css" /> |
||||
<style> |
||||
.tag { color: blue; } |
||||
.attr { color: #990033; } |
||||
</style> |
||||
<script src="js/jquery.js" type="text/javascript"></script> |
||||
<script src="js/jquery.treeview.js" type="text/javascript"></script> |
||||
<script type="text/javascript"> |
||||
$(document).ready(function(){ |
||||
$("#html_tree").treeview({ |
||||
control:"#sidetreecontrol", |
||||
collapsed: true, |
||||
prerendered: true |
||||
}); |
||||
}); |
||||
</script> |
||||
</head> |
||||
<body> |
||||
<div id="main"> |
||||
<h4>Simple HTML DOM Test</h4> |
||||
<form name="form1" method="post" action=""> |
||||
find: <input name="query" type="text" size="60" maxlength="60" value="<?=htmlspecialchars($query)?>">
|
||||
<input type="submit" name="Submit" value="Go"> |
||||
</form> |
||||
<br> |
||||
HTML STAT (<?stat_dom($html);?>)<br>
|
||||
<br> |
||||
<div id="sidetreecontrol"><a href="?#">Collapse All</a> | <a href="?#">Expand All</a></div><br> |
||||
<ul class="treeview" id="html_tree"> |
||||
<? |
||||
ob_start(); |
||||
foreach($target as $e) |
||||
dump_my_html_tree($e, true); |
||||
ob_end_flush(); |
||||
?> |
||||
</ul> |
||||
</div> |
||||
|
||||
</body></html> |
||||
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,68 @@ |
||||
.treeview, .treeview ul { |
||||
padding: 0; |
||||
margin: 0; |
||||
list-style: none; |
||||
} |
||||
|
||||
.treeview ul { |
||||
background-color: white; |
||||
margin-top: 4px; |
||||
} |
||||
|
||||
.treeview .hitarea { |
||||
background: url(images/treeview-default.gif) -64px -25px no-repeat; |
||||
height: 16px; |
||||
width: 16px; |
||||
margin-left: -16px; |
||||
float: left; |
||||
cursor: pointer; |
||||
} |
||||
/* fix for IE6 */ |
||||
* html .hitarea { |
||||
display: inline; |
||||
float:none; |
||||
} |
||||
|
||||
.treeview li { |
||||
margin: 0; |
||||
padding: 3px 0pt 3px 16px; |
||||
} |
||||
|
||||
.treeview a.selected { |
||||
background-color: #eee; |
||||
} |
||||
|
||||
#treecontrol { margin: 1em 0; display: none; } |
||||
|
||||
.treeview .hover { color: red; cursor: pointer; } |
||||
|
||||
.treeview li { background: url(images/treeview-default-line.gif) 0 0 no-repeat; } |
||||
.treeview li.collapsable, .treeview li.expandable { background-position: 0 -176px; } |
||||
|
||||
.treeview .expandable-hitarea { background-position: -80px -3px; } |
||||
|
||||
.treeview li.last { background-position: 0 -1766px } |
||||
.treeview li.lastCollapsable, .treeview li.lastExpandable { background-image: url(images/treeview-default.gif); } |
||||
.treeview li.lastCollapsable { background-position: 0 -111px } |
||||
.treeview li.lastExpandable { background-position: -32px -67px } |
||||
|
||||
.treeview div.lastCollapsable-hitarea, .treeview div.lastExpandable-hitarea { background-position: 0; } |
||||
|
||||
.treeview-red li { background-image: url(images/treeview-red-line.gif); } |
||||
.treeview-red .hitarea, .treeview-red li.lastCollapsable, .treeview-red li.lastExpandable { background-image: url(images/treeview-red.gif); } |
||||
|
||||
.treeview-black li { background-image: url(images/treeview-black-line.gif); } |
||||
.treeview-black .hitarea, .treeview-black li.lastCollapsable, .treeview-black li.lastExpandable { background-image: url(images/treeview-black.gif); } |
||||
|
||||
.treeview-gray li { background-image: url(images/treeview-gray-line.gif); } |
||||
.treeview-gray .hitarea, .treeview-gray li.lastCollapsable, .treeview-gray li.lastExpandable { background-image: url(images/treeview-gray.gif); } |
||||
|
||||
.treeview-famfamfam li { background-image: url(images/treeview-famfamfam-line.gif); } |
||||
.treeview-famfamfam .hitarea, .treeview-famfamfam li.lastCollapsable, .treeview-famfamfam li.lastExpandable { background-image: url(images/treeview-famfamfam.gif); } |
||||
|
||||
|
||||
.filetree li { padding: 3px 0 2px 16px; } |
||||
.filetree span.folder, .filetree span.file { padding: 1px 0 1px 16px; display: block; } |
||||
.filetree span.folder { background: url(images/folder.gif) 0 0 no-repeat; } |
||||
.filetree li.expandable span.folder { background: url(images/folder-closed.gif) 0 0 no-repeat; } |
||||
.filetree span.file { background: url(images/file.gif) 0 0 no-repeat; } |
||||
@ -0,0 +1,251 @@ |
||||
/* |
||||
* Treeview 1.4 - jQuery plugin to hide and show branches of a tree |
||||
*
|
||||
* http://bassistance.de/jquery-plugins/jquery-plugin-treeview/
|
||||
* http://docs.jquery.com/Plugins/Treeview
|
||||
* |
||||
* Copyright (c) 2007 Jörn Zaefferer |
||||
* |
||||
* Dual licensed under the MIT and GPL licenses: |
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
* |
||||
* Revision: $Id: jquery.treeview.js 4684 2008-02-07 19:08:06Z joern.zaefferer $ |
||||
* |
||||
*/ |
||||
|
||||
;(function($) { |
||||
|
||||
$.extend($.fn, { |
||||
swapClass: function(c1, c2) { |
||||
var c1Elements = this.filter('.' + c1); |
||||
this.filter('.' + c2).removeClass(c2).addClass(c1); |
||||
c1Elements.removeClass(c1).addClass(c2); |
||||
return this; |
||||
}, |
||||
replaceClass: function(c1, c2) { |
||||
return this.filter('.' + c1).removeClass(c1).addClass(c2).end(); |
||||
}, |
||||
hoverClass: function(className) { |
||||
className = className || "hover"; |
||||
return this.hover(function() { |
||||
$(this).addClass(className); |
||||
}, function() { |
||||
$(this).removeClass(className); |
||||
}); |
||||
}, |
||||
heightToggle: function(animated, callback) { |
||||
animated ? |
||||
this.animate({ height: "toggle" }, animated, callback) : |
||||
this.each(function(){ |
||||
jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ](); |
||||
if(callback) |
||||
callback.apply(this, arguments); |
||||
}); |
||||
}, |
||||
heightHide: function(animated, callback) { |
||||
if (animated) { |
||||
this.animate({ height: "hide" }, animated, callback); |
||||
} else { |
||||
this.hide(); |
||||
if (callback) |
||||
this.each(callback);
|
||||
} |
||||
}, |
||||
prepareBranches: function(settings) { |
||||
if (!settings.prerendered) { |
||||
// mark last tree items
|
||||
this.filter(":last-child:not(ul)").addClass(CLASSES.last); |
||||
// collapse whole tree, or only those marked as closed, anyway except those marked as open
|
||||
this.filter((settings.collapsed ? "" : "." + CLASSES.closed) + ":not(." + CLASSES.open + ")").find(">ul").hide(); |
||||
} |
||||
// return all items with sublists
|
||||
return this.filter(":has(>ul)"); |
||||
}, |
||||
applyClasses: function(settings, toggler) { |
||||
this.filter(":has(>ul):not(:has(>a))").find(">span").click(function(event) { |
||||
toggler.apply($(this).next()); |
||||
}).add( $("a", this) ).hoverClass(); |
||||
|
||||
if (!settings.prerendered) { |
||||
// handle closed ones first
|
||||
this.filter(":has(>ul:hidden)") |
||||
.addClass(CLASSES.expandable) |
||||
.replaceClass(CLASSES.last, CLASSES.lastExpandable); |
||||
|
||||
// handle open ones
|
||||
this.not(":has(>ul:hidden)") |
||||
.addClass(CLASSES.collapsable) |
||||
.replaceClass(CLASSES.last, CLASSES.lastCollapsable); |
||||
|
||||
// create hitarea
|
||||
this.prepend("<div class=\"" + CLASSES.hitarea + "\"/>").find("div." + CLASSES.hitarea).each(function() { |
||||
var classes = ""; |
||||
$.each($(this).parent().attr("class").split(" "), function() { |
||||
classes += this + "-hitarea "; |
||||
}); |
||||
$(this).addClass( classes ); |
||||
}); |
||||
} |
||||
|
||||
// apply event to hitarea
|
||||
this.find("div." + CLASSES.hitarea).click( toggler ); |
||||
}, |
||||
treeview: function(settings) { |
||||
|
||||
settings = $.extend({ |
||||
cookieId: "treeview" |
||||
}, settings); |
||||
|
||||
if (settings.add) { |
||||
return this.trigger("add", [settings.add]); |
||||
} |
||||
|
||||
if ( settings.toggle ) { |
||||
var callback = settings.toggle; |
||||
settings.toggle = function() { |
||||
return callback.apply($(this).parent()[0], arguments); |
||||
}; |
||||
} |
||||
|
||||
// factory for treecontroller
|
||||
function treeController(tree, control) { |
||||
// factory for click handlers
|
||||
function handler(filter) { |
||||
return function() { |
||||
// reuse toggle event handler, applying the elements to toggle
|
||||
// start searching for all hitareas
|
||||
toggler.apply( $("div." + CLASSES.hitarea, tree).filter(function() { |
||||
// for plain toggle, no filter is provided, otherwise we need to check the parent element
|
||||
return filter ? $(this).parent("." + filter).length : true; |
||||
}) ); |
||||
return false; |
||||
}; |
||||
} |
||||
// click on first element to collapse tree
|
||||
$("a:eq(0)", control).click( handler(CLASSES.collapsable) ); |
||||
// click on second to expand tree
|
||||
$("a:eq(1)", control).click( handler(CLASSES.expandable) ); |
||||
// click on third to toggle tree
|
||||
$("a:eq(2)", control).click( handler() );
|
||||
} |
||||
|
||||
// handle toggle event
|
||||
function toggler() { |
||||
$(this) |
||||
.parent() |
||||
// swap classes for hitarea
|
||||
.find(">.hitarea") |
||||
.swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea ) |
||||
.swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea ) |
||||
.end() |
||||
// swap classes for parent li
|
||||
.swapClass( CLASSES.collapsable, CLASSES.expandable ) |
||||
.swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable ) |
||||
// find child lists
|
||||
.find( ">ul" ) |
||||
// toggle them
|
||||
.heightToggle( settings.animated, settings.toggle ); |
||||
if ( settings.unique ) { |
||||
$(this).parent() |
||||
.siblings() |
||||
// swap classes for hitarea
|
||||
.find(">.hitarea") |
||||
.replaceClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea ) |
||||
.replaceClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea ) |
||||
.end() |
||||
.replaceClass( CLASSES.collapsable, CLASSES.expandable ) |
||||
.replaceClass( CLASSES.lastCollapsable, CLASSES.lastExpandable ) |
||||
.find( ">ul" ) |
||||
.heightHide( settings.animated, settings.toggle ); |
||||
} |
||||
} |
||||
|
||||
function serialize() { |
||||
function binary(arg) { |
||||
return arg ? 1 : 0; |
||||
} |
||||
var data = []; |
||||
branches.each(function(i, e) { |
||||
data[i] = $(e).is(":has(>ul:visible)") ? 1 : 0; |
||||
}); |
||||
$.cookie(settings.cookieId, data.join("") ); |
||||
} |
||||
|
||||
function deserialize() { |
||||
var stored = $.cookie(settings.cookieId); |
||||
if ( stored ) { |
||||
var data = stored.split(""); |
||||
branches.each(function(i, e) { |
||||
$(e).find(">ul")[ parseInt(data[i]) ? "show" : "hide" ](); |
||||
}); |
||||
} |
||||
} |
||||
|
||||
// add treeview class to activate styles
|
||||
this.addClass("treeview"); |
||||
|
||||
// prepare branches and find all tree items with child lists
|
||||
var branches = this.find("li").prepareBranches(settings); |
||||
|
||||
switch(settings.persist) { |
||||
case "cookie": |
||||
var toggleCallback = settings.toggle; |
||||
settings.toggle = function() { |
||||
serialize(); |
||||
if (toggleCallback) { |
||||
toggleCallback.apply(this, arguments); |
||||
} |
||||
}; |
||||
deserialize(); |
||||
break; |
||||
case "location": |
||||
var current = this.find("a").filter(function() { return this.href.toLowerCase() == location.href.toLowerCase(); }); |
||||
if ( current.length ) { |
||||
current.addClass("selected").parents("ul, li").add( current.next() ).show(); |
||||
} |
||||
break; |
||||
} |
||||
|
||||
branches.applyClasses(settings, toggler); |
||||
|
||||
// if control option is set, create the treecontroller and show it
|
||||
if ( settings.control ) { |
||||
treeController(this, settings.control); |
||||
$(settings.control).show(); |
||||
} |
||||
|
||||
return this.bind("add", function(event, branches) { |
||||
$(branches).prev() |
||||
.removeClass(CLASSES.last) |
||||
.removeClass(CLASSES.lastCollapsable) |
||||
.removeClass(CLASSES.lastExpandable) |
||||
.find(">.hitarea") |
||||
.removeClass(CLASSES.lastCollapsableHitarea) |
||||
.removeClass(CLASSES.lastExpandableHitarea); |
||||
$(branches).find("li").andSelf().prepareBranches(settings).applyClasses(settings, toggler); |
||||
}); |
||||
} |
||||
}); |
||||
|
||||
// classes used by the plugin
|
||||
// need to be styled via external stylesheet, see first example
|
||||
var CLASSES = $.fn.treeview.classes = { |
||||
open: "open", |
||||
closed: "closed", |
||||
expandable: "expandable", |
||||
expandableHitarea: "expandable-hitarea", |
||||
lastExpandableHitarea: "lastExpandable-hitarea", |
||||
collapsable: "collapsable", |
||||
collapsableHitarea: "collapsable-hitarea", |
||||
lastCollapsableHitarea: "lastCollapsable-hitarea", |
||||
lastCollapsable: "lastCollapsable", |
||||
lastExpandable: "lastExpandable", |
||||
last: "last", |
||||
hitarea: "hitarea" |
||||
}; |
||||
|
||||
// provide backwards compability
|
||||
$.fn.Treeview = $.fn.treeview; |
||||
|
||||
})(jQuery); |
||||
@ -0,0 +1,24 @@ |
||||
html, body {height:100%; margin: 0; padding: 0; } |
||||
|
||||
html>body { |
||||
font-size: 16px; |
||||
font-size: 68.75%; |
||||
} /* Reset Base Font Size */ |
||||
|
||||
body { |
||||
font-family: Verdana, helvetica, arial, sans-serif; |
||||
font-size: 68.75%; |
||||
background: #fff; |
||||
color: #333; |
||||
} |
||||
|
||||
h1, h2 { font-family: 'trebuchet ms', verdana, arial; padding: 10px; margin: 0 } |
||||
h1 { font-size: large } |
||||
|
||||
#banner { padding: 15px; background-color: #06b; color: white; font-size: large; border-bottom: 1px solid #ccc; |
||||
background: url(bg.gif) repeat-x; text-align: center } |
||||
#banner a { color: white; } |
||||
|
||||
#main { padding: 1em; } |
||||
|
||||
a img { border: none; } |
||||
@ -0,0 +1,109 @@ |
||||
#$Rev: 194 $ |
||||
[Updates - add some ability to insert and create nodes.] |
||||
[1: add ability to search the "noise" array] |
||||
|
||||
[PHP Simple HTML Dom version 1.5 released.] |
||||
1: Memory leak fixed! |
||||
2: Added support for detecting the source html character set. This is used to convert characters when plaintext is requested. |
||||
3: Other little fixes and features, too numerous to categorize. |
||||
|
||||
[On going] |
||||
1. Error of "file_get_contents()" will be thrown as an exception. |
||||
2. Add flag: LOCK_EX while calling "file_put_contents()". |
||||
3. Fix the typo of "token_blank_t". |
||||
|
||||
|
||||
[PHP Simple HTML DOM Parser v1.11 is released] |
||||
1. Supports xpath generated from Firebug. |
||||
2. New method "dump" of "simple_html_dom_node". |
||||
3. New attribute "xmltext" of "simple_html_dom_node". |
||||
4. remove preg_quote on selector match function: [attribute*=value]; |
||||
5. Element "Comment" will treat as children. |
||||
6. Fixed the problem with <pre>. |
||||
7. Fixed bug #2207477 (does not load some pages properly). |
||||
8. Fixed bug #2315853 (Error with character after < sign). |
||||
|
||||
|
||||
[PHP Simple HTML DOM Parser v1.10 is released] |
||||
1. Negative indexes supports of "find" method, thanks for Vadim Voituk. |
||||
2. Constructor with automatically load contents either text or file/url, thanks for Antcs. |
||||
3. Fully supports wildcard in selectors. |
||||
4. Fixed bug of confusing by the < symbol inside the text. |
||||
5. Fixed bug of dash in selectors. |
||||
6. Fixed bug of <nobr>. |
||||
7. Fixed bug #2155883 (Nested List Parses Incorrectly). |
||||
8. Fixed bug #2155113 (error with unclosed html tags). |
||||
|
||||
|
||||
[PHP Simple HTML DOM Parser v1.00 is released] |
||||
1. New method "getAllAttributes" of "simple_html_dom_node". |
||||
2. Fix the bug of selector in some critical conditions. |
||||
3. Fix the bug of striping php tags. |
||||
4. Fix the bug of remove_noise(). |
||||
5. Fix the bug of noise in attributes. |
||||
6. Supports full javascript string in selector: $e->find("a[onclick=alert('hello')]"). |
||||
7. Change selector "*=" to case-insentive. |
||||
|
||||
|
||||
[PHP Simple HTML DOM Parser v0.99 is released] |
||||
1. Performance turning (boost 10%). |
||||
2. Memory requirement reduce 25%. |
||||
3. Change function name from "file_get_dom()" to "file_get_html()". |
||||
4. Change function name from "str_get_dom()" to "str_get_html()". |
||||
5. Fixed bug #2011286 (Error with unclosed html tags). |
||||
6. Fixed bug #2012551 (Error parsing divs). |
||||
7. Fixed bug #2020924 (Error for missed tag.). |
||||
8. Fixed bug (problem with <body> tag's innertext). |
||||
|
||||
|
||||
[PHP Simple HTML DOM Parser v0.98 is released] |
||||
1. Performance turning (boost 20%). |
||||
2. Supports "multiple class" selector feature: <div class="a b c"></div>. |
||||
3. New "callback function" feature. |
||||
4. New "multiple selectors" feature: $dom->find('p,a,b'); |
||||
5. New examples. |
||||
6. Supports extract contents from HTML features: $dom->plaintext; |
||||
7. Fix the bug of $dom->clear(). |
||||
8. Fix the bug of text nodes' innertext. |
||||
9. Fix the bug of comment nodes' innertext. |
||||
10. Fix the bug of decendent selector with optional tags. |
||||
11. Change simple_html_dom_node method name from "text()" to "makeup()". |
||||
|
||||
|
||||
[PHP Simple HTML DOM Parser v0.97 is released] |
||||
1. Important!! file and class name changed (html_dom_parser->simple_html_dom)! |
||||
2. Important!! ($dom->save_file) will not support anymore. |
||||
3. New node type "comment" (eg. $dom->find('comment')). |
||||
4. Add self-closing tags: 'base', 'spacer'. |
||||
5. Fix the bug of outertext (th). |
||||
6. Fix the bug of regular expression escaping chars ($dom->find). |
||||
7. Fix the bug while line-breaker and "\t" in tags. |
||||
8. Remove example "example_customize_parser.php". |
||||
9. New example "simple_html_dom_utility.php". |
||||
|
||||
|
||||
[PHP Simple HTML DOM Parser v0.96 is released] |
||||
1. (Request #1936000) New DOM operations(first_child, last_child, next_sibling, previous_sibling). |
||||
2. New method to remove attribute. |
||||
3. Add the solution while server behind proxy in FAQ (Thanks to Yousuke Shaggy). |
||||
4. Add traverse section in manual. |
||||
5. Now file_get_dom supports full file_get_contents parameters. |
||||
6. Fix the bug of self-closing tags in the end of file. |
||||
7. Fix the bug of blanks in the end of tag. |
||||
8. Add Reference section in manual. |
||||
#. Fix some typo of testcase. |
||||
|
||||
|
||||
[PHP Simple HTML DOM Parser v0.95 is released] |
||||
1. New attribute filters (Thanks to Yousuke Kumakura). |
||||
2. Fix the bug of optional-closing tags. |
||||
3. Fix the bug of parsing the line break next to the tag's name. |
||||
4. Supports tag name with namespace. |
||||
#. Refine structure of testcase. |
||||
|
||||
|
||||
[PHP Simple HTML DOM Parser v0.94 is released] |
||||
1. Stop infinity loop while tthe source content is BAD HTML. |
||||
2. Fix the bug of adding new attributes to self closing tags. |
||||
3. Fix the bug of customize parser without $dom->remove_noise(); |
||||
4. Add FAQ section in manual. |
||||
@ -0,0 +1,54 @@ |
||||
<?php |
||||
// example of how to use advanced selector features |
||||
include('../simple_html_dom.php'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// descendant selector |
||||
$str = <<<HTML |
||||
<div> |
||||
<div> |
||||
<div class="foo bar">ok</div> |
||||
</div> |
||||
</div> |
||||
HTML; |
||||
|
||||
$html = str_get_html($str); |
||||
echo $html->find('div div div', 0)->innertext . '<br>'; // result: "ok" |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// nested selector |
||||
$str = <<<HTML |
||||
<ul id="ul1"> |
||||
<li>item:<span>1</span></li> |
||||
<li>item:<span>2</span></li> |
||||
</ul> |
||||
<ul id="ul2"> |
||||
<li>item:<span>3</span></li> |
||||
<li>item:<span>4</span></li> |
||||
</ul> |
||||
HTML; |
||||
|
||||
$html = str_get_html($str); |
||||
foreach($html->find('ul') as $ul) { |
||||
foreach($ul->find('li') as $li) |
||||
echo $li->innertext . '<br>'; |
||||
} |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// parsing checkbox |
||||
$str = <<<HTML |
||||
<form name="form1" method="post" action=""> |
||||
<input type="checkbox" name="checkbox1" value="checkbox1" checked>item1<br> |
||||
<input type="checkbox" name="checkbox2" value="checkbox2">item2<br> |
||||
<input type="checkbox" name="checkbox3" value="checkbox3" checked>item3<br> |
||||
</form> |
||||
HTML; |
||||
|
||||
$html = str_get_html($str); |
||||
foreach($html->find('input[type=checkbox]') as $checkbox) { |
||||
if ($checkbox->checked) |
||||
echo $checkbox->name . ' is checked<br>'; |
||||
else |
||||
echo $checkbox->name . ' is not checked<br>'; |
||||
} |
||||
?> |
||||
@ -0,0 +1,37 @@ |
||||
<?php |
||||
// example of how to use basic selector to retrieve HTML contents |
||||
include('../simple_html_dom.php'); |
||||
|
||||
// get DOM from URL or file |
||||
$html = file_get_html('http://www.google.com/'); |
||||
|
||||
// find all link |
||||
foreach($html->find('a') as $e) |
||||
echo $e->href . '<br>'; |
||||
|
||||
// find all image |
||||
foreach($html->find('img') as $e) |
||||
echo $e->src . '<br>'; |
||||
|
||||
// find all image with full tag |
||||
foreach($html->find('img') as $e) |
||||
echo $e->outertext . '<br>'; |
||||
|
||||
// find all div tags with id=gbar |
||||
foreach($html->find('div#gbar') as $e) |
||||
echo $e->innertext . '<br>'; |
||||
|
||||
// find all span tags with class=gb1 |
||||
foreach($html->find('span.gb1') as $e) |
||||
echo $e->outertext . '<br>'; |
||||
|
||||
// find all td tags with attribite align=center |
||||
foreach($html->find('td[align=center]') as $e) |
||||
echo $e->innertext . '<br>'; |
||||
|
||||
// extract text from table |
||||
echo $html->find('td[align="center"]', 1)->plaintext.'<br><hr>'; |
||||
|
||||
// extract text from HTML |
||||
echo $html->plaintext; |
||||
?> |
||||
@ -0,0 +1,28 @@ |
||||
<?php |
||||
include_once('../simple_html_dom.php'); |
||||
|
||||
|
||||
// 1. Write a function with parameter "$element" |
||||
function my_callback($element) { |
||||
if ($element->tag=='input') |
||||
$element->outertext = 'input'; |
||||
|
||||
if ($element->tag=='img') |
||||
$element->outertext = 'img'; |
||||
|
||||
if ($element->tag=='a') |
||||
$element->outertext = 'a'; |
||||
} |
||||
|
||||
|
||||
// 2. create HTML Dom |
||||
$html = file_get_html('http://www.google.com/'); |
||||
|
||||
|
||||
// 3. Register the callback function with it's function name |
||||
$html->set_callback('my_callback'); |
||||
|
||||
|
||||
// 4. Callback function will be invoked while dumping |
||||
echo $html; |
||||
?> |
||||
@ -0,0 +1,5 @@ |
||||
<?php |
||||
include_once('../simple_html_dom.php'); |
||||
|
||||
echo file_get_html('http://www.google.com/')->plaintext; |
||||
?> |
||||
@ -0,0 +1,18 @@ |
||||
<?php |
||||
// example of how to modify HTML contents |
||||
include('../simple_html_dom.php'); |
||||
|
||||
// get DOM from URL or file |
||||
$html = file_get_html('http://www.google.com/'); |
||||
|
||||
// remove all image |
||||
foreach($html->find('img') as $e) |
||||
$e->outertext = ''; |
||||
|
||||
// replace all input |
||||
foreach($html->find('input') as $e) |
||||
$e->outertext = '[INPUT]'; |
||||
|
||||
// dump contents |
||||
echo $html; |
||||
?> |
||||
@ -0,0 +1,44 @@ |
||||
<?php |
||||
include_once('../../simple_html_dom.php'); |
||||
|
||||
function scraping_digg() { |
||||
// create HTML DOM |
||||
$html = file_get_html('http://digg.com/'); |
||||
|
||||
// get news block |
||||
foreach($html->find('div.news-summary') as $article) { |
||||
// get title |
||||
$item['title'] = trim($article->find('h3', 0)->plaintext); |
||||
// get details |
||||
$item['details'] = trim($article->find('p', 0)->plaintext); |
||||
// get intro |
||||
$item['diggs'] = trim($article->find('li a strong', 0)->plaintext); |
||||
|
||||
$ret[] = $item; |
||||
} |
||||
|
||||
// clean up memory |
||||
$html->clear(); |
||||
unset($html); |
||||
|
||||
return $ret; |
||||
} |
||||
|
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// test it! |
||||
|
||||
// "http://digg.com" will check user_agent header... |
||||
ini_set('user_agent', 'My-Application/2.5'); |
||||
|
||||
$ret = scraping_digg(); |
||||
|
||||
foreach($ret as $v) { |
||||
echo $v['title'].'<br>'; |
||||
echo '<ul>'; |
||||
echo '<li>'.$v['details'].'</li>'; |
||||
echo '<li>Diggs: '.$v['diggs'].'</li>'; |
||||
echo '</ul>'; |
||||
} |
||||
|
||||
?> |
||||
@ -0,0 +1,51 @@ |
||||
<?php |
||||
include_once('../../simple_html_dom.php'); |
||||
|
||||
function scraping_IMDB($url) { |
||||
// create HTML DOM |
||||
$html = file_get_html($url); |
||||
|
||||
// get title |
||||
$ret['Title'] = $html->find('title', 0)->innertext; |
||||
|
||||
// get rating |
||||
$ret['Rating'] = $html->find('div[class="general rating"] b', 0)->innertext; |
||||
|
||||
// get overview |
||||
foreach($html->find('div[class="info"]') as $div) { |
||||
// skip user comments |
||||
if($div->find('h5', 0)->innertext=='User Comments:') |
||||
return $ret; |
||||
|
||||
$key = ''; |
||||
$val = ''; |
||||
|
||||
foreach($div->find('*') as $node) { |
||||
if ($node->tag=='h5') |
||||
$key = $node->plaintext; |
||||
|
||||
if ($node->tag=='a' && $node->plaintext!='more') |
||||
$val .= trim(str_replace("\n", '', $node->plaintext)); |
||||
|
||||
if ($node->tag=='text') |
||||
$val .= trim(str_replace("\n", '', $node->plaintext)); |
||||
} |
||||
|
||||
$ret[$key] = $val; |
||||
} |
||||
|
||||
// clean up memory |
||||
$html->clear(); |
||||
unset($html); |
||||
|
||||
return $ret; |
||||
} |
||||
|
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// test it! |
||||
$ret = scraping_IMDB('http://imdb.com/title/tt0335266/'); |
||||
|
||||
foreach($ret as $k=>$v) |
||||
echo '<strong>'.$k.' </strong>'.$v.'<br>'; |
||||
?> |
||||
@ -0,0 +1,35 @@ |
||||
<?php |
||||
include_once('../../simple_html_dom.php'); |
||||
|
||||
function scraping_slashdot() { |
||||
// create HTML DOM |
||||
$html = file_get_html('http://slashdot.org/'); |
||||
|
||||
// get article block |
||||
foreach($html->find('div[id^=firehose-]') as $article) { |
||||
// get title |
||||
$item['title'] = trim($article->find('a.datitle', 0)->plaintext); |
||||
// get body |
||||
$item['body'] = trim($article->find('div.body', 0)->plaintext); |
||||
|
||||
$ret[] = $item; |
||||
} |
||||
|
||||
// clean up memory |
||||
$html->clear(); |
||||
unset($html); |
||||
|
||||
return $ret; |
||||
} |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// test it! |
||||
$ret = scraping_slashdot(); |
||||
|
||||
foreach($ret as $v) { |
||||
echo $v['title'].'<br>'; |
||||
echo '<ul>'; |
||||
echo '<li>'.$v['body'].'</li>'; |
||||
echo '</ul>'; |
||||
} |
||||
?> |
||||
@ -0,0 +1,35 @@ |
||||
<?php |
||||
include_once('../simple_html_dom.php'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// remove HTML comments |
||||
function html_no_comment($url) { |
||||
// create HTML DOM |
||||
$html = file_get_html($url); |
||||
|
||||
// remove all comment elements |
||||
foreach($html->find('comment') as $e) |
||||
$e->outertext = ''; |
||||
|
||||
$ret = $html->save(); |
||||
|
||||
// clean up memory |
||||
$html->clear(); |
||||
unset($html); |
||||
|
||||
return $ret; |
||||
} |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// search elements that contains an specific text |
||||
function find_contains($html, $selector, $keyword, $index=-1) { |
||||
$ret = array(); |
||||
foreach ($html->find($selector) as $e) { |
||||
if (strpos($e->innertext, $keyword)!==false) |
||||
$ret[] = $e; |
||||
} |
||||
|
||||
if ($index<0) return $ret; |
||||
return (isset($ret[$index])) ? $ret[$index] : null; |
||||
} |
||||
?> |
||||
@ -0,0 +1,113 @@ |
||||
/*$Rev: 46 $*/ |
||||
|
||||
body { |
||||
margin: 0; |
||||
padding: 0; |
||||
font-family: verdana,arial,helvetica,sans-serif; |
||||
font-size: 11px; |
||||
color: #4F5155; |
||||
} |
||||
|
||||
#content { |
||||
margin: 0 20px 0 20px; |
||||
line-height: 16px; |
||||
padding: 0; |
||||
} |
||||
|
||||
h1 { |
||||
font-size: 18px; |
||||
margin: 0; |
||||
padding: 0 0 2px 0; |
||||
background-color: #D0D0D0; |
||||
text-align: center; |
||||
} |
||||
|
||||
h2 { |
||||
background-color: #727EA3; |
||||
border-right: 1px solid #D0D0D0; |
||||
border-bottom: 1px solid #D0D0D0; |
||||
color: #FFFFFF; |
||||
font-size: 14px; |
||||
font-weight: bold; |
||||
margin: 14px 0 4px 0; |
||||
padding: 1px 10px 1px 10px; |
||||
} |
||||
|
||||
ul { |
||||
margin-top: 0; |
||||
margin-bottom: 0; |
||||
line-height:1.5em; |
||||
list-style-image:url(bullet.gif); |
||||
list-style-type:square; |
||||
} |
||||
|
||||
.top { |
||||
font-size: 11px; |
||||
float: right; |
||||
} |
||||
|
||||
.code { |
||||
font-size: 11px; |
||||
font-family: Monaco, Verdana, Sans-serif; |
||||
line-height: 14px; |
||||
background-color: #f6f6f6; |
||||
border-bottom: 1px solid #D0D0D0; |
||||
border-top: 1px solid #A0A0A0; |
||||
border-left: 1px solid #A0A0A0; |
||||
border-right: 1px solid #D0D0D0; |
||||
color: #002166; |
||||
display: block; |
||||
margin: 2px 0 2px 0; |
||||
padding: 2px 10px 2px 10px; |
||||
} |
||||
|
||||
.code A:link {color: #002166; text-decoration: none; font-weight: bold;} |
||||
.code A:visited {color: #002166; text-decoration: none; font-weight: bold;} |
||||
.code A:active {color: #002166; text-decoration: none; font-weight: bold;} |
||||
.code A:hover {color: #0000ff; text-decoration: underline; font-weight: bold;} |
||||
|
||||
.code .keyword { |
||||
color: #007700; |
||||
} |
||||
|
||||
.code .comment { |
||||
font-size: 10px; |
||||
color: #888; |
||||
} |
||||
|
||||
.code .var { |
||||
color: #770000; |
||||
} |
||||
|
||||
th { |
||||
font-family: Lucida Grande, Verdana, Geneva, Sans-serif; |
||||
color: #000000; |
||||
background-color: #CFD4E6; |
||||
margin: 2px 2px 2px 2px; |
||||
padding: 2px 2px 2px 2px; |
||||
font-size: 13px; |
||||
font-weight: normal; |
||||
font-style: normal; |
||||
} |
||||
|
||||
td { |
||||
background-color: #dddddd; |
||||
} |
||||
|
||||
.description { |
||||
font-family: Lucida Grande, Verdana, Geneva, Sans-serif; |
||||
font-size: 11px; |
||||
color: #333; |
||||
text-ident: 30px; |
||||
font-style: normal; |
||||
} |
||||
|
||||
.returns { |
||||
font-family: Monaco, Verdana, Sans-serif; |
||||
font-size: 10px; |
||||
color: #888; |
||||
float: left; |
||||
text-align: right; |
||||
margin: 0 4px 0 0; |
||||
width: 48px; |
||||
} |
||||
@ -0,0 +1,116 @@ |
||||
/* Caution! Ensure accessibility in print and other media types... */ |
||||
@media projection, screen { /* Use class for showing/hiding tab content, so that visibility can be better controlled in different media types... */ |
||||
.ui-tabs-hide { |
||||
display: none; |
||||
} |
||||
} |
||||
|
||||
/* Hide useless elements in print layouts... */ |
||||
@media print { |
||||
.ui-tabs-nav { |
||||
display: none; |
||||
} |
||||
} |
||||
|
||||
/* Skin */ |
||||
.ui-tabs-nav, .ui-tabs-panel { |
||||
font-family: "Trebuchet MS", Trebuchet, Verdana, Helvetica, Arial, sans-serif; |
||||
font-size: 12px; |
||||
} |
||||
.ui-tabs-nav { |
||||
list-style: none; |
||||
margin: 0; |
||||
padding: 0 0 0 4px; |
||||
} |
||||
.ui-tabs-nav:after { /* clearing without presentational markup, IE gets extra treatment */ |
||||
display: block; |
||||
clear: both; |
||||
content: " "; |
||||
} |
||||
.ui-tabs-nav li { |
||||
float: left; |
||||
margin: 0 0 0 1px; |
||||
min-width: 84px; /* be nice to Opera */ |
||||
} |
||||
.ui-tabs-nav a, .ui-tabs-nav a span { |
||||
display: block; |
||||
padding: 0 10px; |
||||
background: url(../img/tab.png) no-repeat; |
||||
} |
||||
.ui-tabs-nav a { |
||||
margin: 1px 0 0; /* position: relative makes opacity fail for disabled tab in IE */ |
||||
padding-left: 0; |
||||
color: #27537a; |
||||
font-weight: bold; |
||||
line-height: 1.2; |
||||
text-align: center; |
||||
text-decoration: none; |
||||
white-space: nowrap; /* required in IE 6 */ |
||||
outline: 0; /* prevent dotted border in Firefox */ |
||||
} |
||||
.ui-tabs-nav .ui-tabs-selected a { |
||||
position: relative; |
||||
top: 1px; |
||||
z-index: 2; |
||||
margin-top: 0; |
||||
color: #000; |
||||
} |
||||
.ui-tabs-nav a span { |
||||
width: 64px; /* IE 6 treats width as min-width */ |
||||
min-width: 64px; |
||||
height: 18px; /* IE 6 treats height as min-height */ |
||||
min-height: 18px; |
||||
padding-top: 6px; |
||||
padding-right: 0; |
||||
} |
||||
*>.ui-tabs-nav a span { /* hide from IE 6 */ |
||||
width: auto; |
||||
height: auto; |
||||
} |
||||
.ui-tabs-nav .ui-tabs-selected a span { |
||||
padding-bottom: 1px; |
||||
} |
||||
.ui-tabs-nav .ui-tabs-selected a, .ui-tabs-nav a:hover, .ui-tabs-nav a:focus, .ui-tabs-nav a:active { |
||||
background-position: 100% -150px; |
||||
} |
||||
.ui-tabs-nav a, .ui-tabs-nav .ui-tabs-disabled a:hover, .ui-tabs-nav .ui-tabs-disabled a:focus, .ui-tabs-nav .ui-tabs-disabled a:active { |
||||
background-position: 100% -100px; |
||||
} |
||||
.ui-tabs-nav .ui-tabs-selected a span, .ui-tabs-nav a:hover span, .ui-tabs-nav a:focus span, .ui-tabs-nav a:active span { |
||||
background-position: 0 -50px; |
||||
} |
||||
.ui-tabs-nav a span, .ui-tabs-nav .ui-tabs-disabled a:hover span, .ui-tabs-nav .ui-tabs-disabled a:focus span, .ui-tabs-nav .ui-tabs-disabled a:active span { |
||||
background-position: 0 0; |
||||
} |
||||
.ui-tabs-nav .ui-tabs-selected a:link, .ui-tabs-nav .ui-tabs-selected a:visited, .ui-tabs-nav .ui-tabs-disabled a:link, .ui-tabs-nav .ui-tabs-disabled a:visited { /* @ Opera, use pseudo classes otherwise it confuses cursor... */ |
||||
cursor: text; |
||||
} |
||||
.ui-tabs-nav a:hover, .ui-tabs-nav a:focus, .ui-tabs-nav a:active, |
||||
.ui-tabs-nav .ui-tabs-unselect a:hover, .ui-tabs-nav .ui-tabs-unselect a:focus, .ui-tabs-nav .ui-tabs-unselect a:active { /* @ Opera, we need to be explicit again here now... */ |
||||
cursor: pointer; |
||||
} |
||||
.ui-tabs-disabled { |
||||
opacity: .4; |
||||
filter: alpha(opacity=40); |
||||
} |
||||
.ui-tabs-panel { |
||||
border-top: 1px solid #97a5b0; |
||||
padding: 2px 4px 2px 4px; |
||||
background: #fff; /* declare background color for container to avoid distorted fonts in IE while fading */ |
||||
border: 1px solid #D0D0D0; |
||||
border-bottom: 1px solid #A0A0A0; |
||||
border-right: 1px solid #A0A0A0; |
||||
} |
||||
.ui-tabs-loading em { |
||||
padding: 0 0 0 20px; |
||||
background: url(loading.gif) no-repeat 0 50%; |
||||
} |
||||
|
||||
/* Additional IE specific bug fixes... */ |
||||
* html .ui-tabs-nav { /* auto clear, @ IE 6 & IE 7 Quirks Mode */ |
||||
display: inline-block; |
||||
} |
||||
*:first-child+html .ui-tabs-nav { /* @ IE 7 Standards Mode - do not group selectors, otherwise IE 6 will ignore complete rule (because of the unknown + combinator)... */ |
||||
display: inline-block; |
||||
} |
||||
|
||||
|
After Width: | Height: | Size: 734 B |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,448 @@ |
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
||||
<html> |
||||
<head> |
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
||||
<title>PHP Simple HTML DOM Parser: Manual</title> |
||||
<link href="css/default.css" rel="stylesheet" type="text/css"> |
||||
<link rel="stylesheet" href="css/ui.tabs.css" type="text/css" media="print, projection, screen"> |
||||
<script type="text/javascript" src="js/jquery-1.2.3.pack.js"></script> |
||||
<script type="text/javascript" src="js/ui.tabs.pack.js"></script> |
||||
<script language="JavaScript" type="text/JavaScript"> |
||||
$(document).ready(function(){ |
||||
$(function() {$('#container_quickstart > ul').tabs();}); |
||||
$(function() {$('#container_create > ul').tabs();}); |
||||
$(function() {$('#container_find > ul').tabs();}); |
||||
$(function() {$('#container_access > ul').tabs();}); |
||||
$(function() {$('#container_traverse > ul').tabs();}); |
||||
$(function() {$('#container_dump > ul').tabs();}); |
||||
$(function() {$('#container_callback > ul').tabs();}); |
||||
}); |
||||
</script> |
||||
</head> |
||||
<body> |
||||
<h1><a name="top"></a>PHP Simple HTML DOM Parser Manual</h1> |
||||
<div id="content"> |
||||
<h2>Index</h2> |
||||
<ul> |
||||
<li><a href="#section_quickstart">Quick Start</a></li> |
||||
<li><a href="#section_create">How to create HTML DOM object?</a></li> |
||||
<li><a href="#section_find">How to find HTML elements?</a></li> |
||||
<li><a href="#section_access">How to access the HTML element's attributes?</a> </li> |
||||
<li><a href="#section_traverse">How to traverse the DOM tree?</a></li> |
||||
<li><a href="#section_dump">How to dump contents of DOM object?</a></li> |
||||
<li><a href="#section_callback">How to customize the parsing behavior?</a></li> |
||||
<li><a href="manual_api.htm">API Reference</a></li> |
||||
<li><a href="manual_faq.htm">FAQ</a></li> |
||||
</ul> |
||||
|
||||
<a name="section_quickstart"></a> |
||||
<h2>Quick Start</h2> |
||||
<a class="top" href="#top">Top</a> |
||||
<div id="container_quickstart"> |
||||
<ul> |
||||
<li><a href="#fragment-11"><span>Get HTML elements</span></a></li> |
||||
<li><a href="#fragment-12"><span>Modify HTML elements</span></a></li> |
||||
<li><a href="#fragment-13"><span>Extract contents from HTML</span></a></li> |
||||
<li><a href="#fragment-14"><span>Scraping Slashdot!</span></a></li> |
||||
</ul> |
||||
<div id="fragment-11"> |
||||
<div class="code"> |
||||
<span class="comment">// Create DOM from URL or file</span><br> |
||||
$html = <strong>file_get_html</strong>(<span class="var">'http://www.google.com/'</span>);<br> |
||||
<br> |
||||
<span class="comment">// Find all images </span><br> |
||||
foreach($html-><strong>find</strong>(<span class="var">'img'</span>) as $element) <br> |
||||
echo $element-><strong>src</strong> . <span class="var">'<br>'</span>;<br> |
||||
<br> |
||||
<span class="comment">// Find all links </span><br> |
||||
foreach($html-><strong>find</strong>(<span class="var">'a'</span>) as $element) <br> |
||||
echo $element-><strong>href</strong> . <span class="var">'<br>'</span>; </div> |
||||
</div> |
||||
<div id="fragment-12"> |
||||
<div class="code"> |
||||
<span class="comment">// Create DOM from string</span><br> |
||||
$html = <strong>str_get_html</strong>(<span class="var">'<div id="hello">Hello</div><div id="world">World</div>'</span>);<span class="comment"><br> |
||||
<br> |
||||
</span> |
||||
|
||||
$html-><strong>find</strong>(<span class="var">'div', 1</span>)-><strong>class</strong> = <span class="var">'bar'</span>;<br> |
||||
<br> |
||||
$html-><strong>find</strong>(<span class="var">'div[id=hello]', 0</span>)-><strong>innertext</strong> = <span class="var">'foo'</span>;<br> |
||||
<br> |
||||
echo $html; <span class="comment">// Output: <div id="hello"><strong>foo</strong></div><div id="world" <strong>class="bar"</strong>>World</div></span> </div> |
||||
</div> |
||||
<div id="fragment-13"> |
||||
<div class="code"><br> |
||||
<span class="comment">// Dump contents (without tags) from HTML</span><br> |
||||
echo <strong>file_get_html</strong>(<span class="var">'http://www.google.com/'</span>)-><strong>plaintext</strong>; |
||||
<br> |
||||
<br> |
||||
</div> |
||||
</div> |
||||
<div id="fragment-14"> |
||||
<div class="code"> |
||||
<span class="comment">// Create DOM from URL</span><br> |
||||
$html = <strong>file_get_html</strong>(<span class="var">'http://slashdot.org/'</span>);<br> |
||||
<br> |
||||
<span class="comment">// Find all article blocks</span><br> |
||||
foreach($html-><strong>find</strong>(<span class="var">'div.article'</span>) as $article) {<br> |
||||
$item[<span class="var">'title'</span>] = $article-><strong>find</strong>(<span class="var">'div.title'</span>, <span class="var">0</span>)-><strong>plaintext</strong>;<br> |
||||
$item[<span class="var">'intro'</span>] = $article-><strong>find</strong>(<span class="var">'div.intro'</span>, <span class="var">0</span>)-><strong>plaintext</strong>;<br> |
||||
$item[<span class="var">'details'</span>] = $article-><strong>find</strong>(<span class="var">'div.details'</span>, <span class="var">0</span>)-><strong>plaintext</strong>;<br> |
||||
$articles[] = $item;<br> |
||||
}<br> |
||||
<br> |
||||
print_r($articles); |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<a name="section_create"></a> |
||||
<h2>How to create HTML DOM object?</h2> |
||||
<a class="top" href="#top">Top</a> |
||||
<div id="container_create"> |
||||
<ul> |
||||
<li><a href="#frag_create_quick"><span>Quick way</span></a></li> |
||||
<li><a href="#frag_create_oo"><span>Object-oriented way</span></a></li> |
||||
</ul> |
||||
<div id="frag_create_quick"> |
||||
<div class="code"><span class="comment">// Create a DOM object from a string</span><br> |
||||
$html = <strong>str_get_html</strong>(<span class="var">'<html><body>Hello!</body></html>'</span>);<br> |
||||
<br> |
||||
<span class="comment">// Create a DOM object from a URL</span><br> |
||||
$html = <strong>file_get_html</strong>(<span class="var">'http://www.google.com/'</span>);<br> |
||||
<br> |
||||
<span class="comment">// Create a DOM object from a HTML file</span><br> |
||||
$html = <strong>file_get_html</strong>(<span class="var">'test.htm'</span>);<span class="comment"><br> |
||||
</span></div> |
||||
</div> |
||||
<div id="frag_create_oo"> |
||||
<div class="code"><span class="comment">// Create a DOM object</span><br> |
||||
$html = new <strong>simple_html_dom</strong>();<br> |
||||
<br> |
||||
<span class="comment">// Load HTML from a string</span><br> |
||||
$html-><strong>load</strong>(<span class="var">'<html><body>Hello!</body></html>'</span>);<br> |
||||
<br> |
||||
<span class="comment">// Load HTML from a URL </span> <br> |
||||
$html-><strong>load_file</strong>(<span class="var">'http://www.google.com/'</span>);<br> |
||||
<br> |
||||
<span class="comment">// Load HTML from a HTML file</span> <br> |
||||
$html-><strong>load_file</strong>(<span class="var">'test.htm'</span>);</div> |
||||
</div> |
||||
</div> |
||||
<a name="section_find"></a> |
||||
<h2>How to find HTML elements?</h2> |
||||
<a class="top" href="#top">Top</a> |
||||
<div id="container_find"> |
||||
<ul> |
||||
<li><a href="#frag_find_basic"><span>Basics</span></a></li> |
||||
<li><a href="#frag_find_advanced"><span>Advanced</span></a></li> |
||||
<li><a href="#frag_find_chain"><span>Descendant selectors</span></a></li> |
||||
<li><a href="#frag_find_nested"><span>Nested selectors</span></a></li> |
||||
<li><a href="#frag_find_attr"><span>Attribute Filters</span></a></li> |
||||
<li><a href="#frag_find_textcomment"><span>Text & Comments</span></a></li> |
||||
</ul> |
||||
<div id="frag_find_basic"> |
||||
<div class="code"> <span class="comment">// Find all <strong>anchors</strong>, returns a <strong>array</strong> of element objects</span><br> |
||||
$ret = $html->find(<span class="var">'<strong>a</strong>'</span>);<br> |
||||
<br> |
||||
<span class="comment">// Find <strong>(N)th</strong> <strong>anchor</strong>, returns element object or <strong>null</strong> if not found</span> <span class="comment">(zero based)</span><br> |
||||
$ret = $html->find(<span class="var">'<strong>a</strong>', <strong>0</strong></span>);<br> |
||||
<br> |
||||
<span class="comment">// Find <strong>lastest</strong> <strong>anchor</strong>, returns element object or <strong>null</strong> if not found</span> <span class="comment">(zero based)</span><br> |
||||
$ret = $html->find(<span class="var">'<strong>a</strong>', <strong>-1</strong></span>); <br> |
||||
<br> |
||||
<span class="comment">// Find all <strong><div></strong> with the <strong>id</strong> attribute</span><br> |
||||
$ret = $html->find(<span class="var">'<strong>div[id]</strong>'</span>);<br> |
||||
<br> |
||||
<span class="comment">// Find all <strong><div></strong> which attribute <strong>id=foo</strong></span><br> |
||||
$ret = $html->find(<span class="var">'<strong>div[id=foo]</strong>'</span>); <br> |
||||
</div> |
||||
</div> |
||||
<div id="frag_find_advanced"> |
||||
<div class="code"><span class="comment">// Find all element which <strong>id</strong>=foo</span><br> |
||||
$ret = $html->find(<span class="var">'<strong>#foo</strong>'</span>);<br> |
||||
<br> |
||||
<span class=comment>// Find all element which <strong>class</strong>=foo</span><br> |
||||
$ret = $html->find(<span class=var>'<strong>.foo</strong>'</span>);<br> |
||||
<br> |
||||
<span class="comment">// Find all element has attribute<strong> id</strong></span><br> |
||||
$ret = $html->find(<span class="var">'<strong>*[id]</strong>'</span>); <br> |
||||
<br> |
||||
<span class="comment">// Find all <strong>anchors</strong> and <strong>images</strong> </span><br> |
||||
$ret = $html->find(<span class="var">'<strong>a, img</strong>'</span>); <br> |
||||
<br> |
||||
<span class="comment">// Find all <strong>anchors</strong> and <strong>images</strong> with the "title" attribute</span><br> |
||||
$ret = $html->find(<span class="var">'<strong>a[title], img[title]</strong>'</span>);<br> |
||||
</div> |
||||
</div> |
||||
<div id="frag_find_attr"> |
||||
<div class="code"> |
||||
Supports these operators in attribute selectors:<br><br> |
||||
<table cellpadding="1" cellspacing="1"> |
||||
<tr> |
||||
<th width="25%">Filter</th> |
||||
<th width="75%">Description</th> |
||||
</tr> |
||||
<tr> |
||||
<td>[attribute]</td> |
||||
<td>Matches elements that <strong>have</strong> the specified attribute.</td> |
||||
</tr> |
||||
<tr> |
||||
<td>[!attribute]</td> |
||||
<td>Matches elements that <strong>don't have</strong> the specified attribute.</td> |
||||
</tr> |
||||
<tr> |
||||
<td>[attribute=value]</td> |
||||
<td>Matches elements that have the specified attribute with a <strong>certain value</strong>.</td> |
||||
</tr> |
||||
<tr> |
||||
<td>[attribute!=value]</td> |
||||
<td>Matches elements that <strong>don't have</strong> the specified attribute with a certain value.</td> |
||||
</tr> |
||||
<tr> |
||||
<td>[attribute^=value]</td> |
||||
<td>Matches elements that have the specified attribute and it <strong>starts</strong> with a certain value.</td> |
||||
</tr> |
||||
<tr> |
||||
<td>[attribute$=value]</td> |
||||
<td>Matches elements that have the specified attribute and it <strong>ends</strong> with a certain value.</td> |
||||
</tr> |
||||
<tr> |
||||
<td>[attribute*=value]</td> |
||||
<td>Matches elements that have the specified attribute and it <strong>contains</strong> a certain value.</td> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
</div> |
||||
<div id="frag_find_chain"> |
||||
<div class="code"><span class="comment">// Find all <li> in <ul> </span><br> |
||||
$es = $html->find(<span class="var">'<strong>ul li</strong>'</span>);<br> |
||||
<br> |
||||
<span class="comment">// Find Nested <div> </span><span class="comment">tags</span><br> |
||||
$es = $html->find(<span class="var">'<strong>div div div</strong>'</span>); <br> |
||||
<br> |
||||
<span class="comment">// Find all <td> in <table> which class=hello </span><br> |
||||
$es = $html->find(<span class="var">'<strong>table.hello td</strong>'</span>);<br> |
||||
<br> |
||||
<span class="comment">// Find all td tags with attribite align=center in table tags </span><br> |
||||
$es = $html->find(<span class="var">''<strong>table</strong><strong> td[align=center]</strong>'</span>);<br> |
||||
</div> |
||||
</div> |
||||
<div id="frag_find_textcomment"> |
||||
<div class="code"><span class="comment"> // Find all text blocks </span><br> |
||||
$es = $html->find(<span class="var">'<strong>text</strong>'</span>);<br> |
||||
<br> |
||||
<span class="comment">// Find all comment (<!--...-->) blocks </span><br> |
||||
$es = $html->find(<span class="var">'<strong>comment</strong>'</span>);<br> |
||||
</div> |
||||
</div> |
||||
<div id="frag_find_nested"> |
||||
<div class="code"> <span class="comment">// Find all <li> in <ul> </span><br> |
||||
foreach($html->find(<span class="var">'<strong>ul</strong>'</span>) as $ul) <br> |
||||
{<br> |
||||
foreach($ul->find(<span class="var">'<strong>li</strong>'</span>) as $li) <br> |
||||
{<br> |
||||
<span class="comment">// do something...</span><br> |
||||
}<br> |
||||
}<br> |
||||
<br> |
||||
<span class="comment">// Find first <li> in first <ul></span> <br> |
||||
$e = $html->find(<span class="var">'<strong>ul</strong>', <strong>0</strong></span>)->find(<span class="var">'<strong>li</strong>', <strong>0</strong></span>);<br> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<a name="section_access"></a> |
||||
<h2>How to access the HTML element's attributes?</h2> |
||||
<a class="top" href="#top">Top</a> |
||||
<div id="container_access"> |
||||
<ul> |
||||
<li><a href="#frag_access_attr"><span>Get, Set and Remove attributes</span></a></li> |
||||
<li><a href="#frag_access_special"><span>Magic attributes</span></a></li> |
||||
<li><a href="#frag_access_tips"><span>Tips</span></a></li> |
||||
</ul> |
||||
<div id="frag_access_attr"> |
||||
<div class="code"> |
||||
<span class="comment">// <strong>Get</strong> a attribute ( If the attribute is <strong>non-value</strong> attribute (eg. checked, selected...), it will returns <strong>true</strong> or <strong>false</strong>)</span><br> |
||||
$value = $e-><strong>href</strong>;<br> |
||||
<br> |
||||
<span class="comment">// <strong>Set</strong> a attribute(If the attribute is <strong>non-value</strong> attribute (eg. checked, selected...), set it's value as <strong>true</strong> or <strong>false</strong>)</span><br> |
||||
$e-><strong>href</strong> = <span class="var">'my link'</span>;<br> |
||||
<br> |
||||
<span class="comment">// <strong>Remove</strong> a attribute, set it's value as null! </span><br> |
||||
$e-><strong>href</strong> = <strong><span class="var">null</span></strong>;<br> |
||||
<br> |
||||
<span class="comment">// <strong>Determine</strong> whether a attribute exist?</span> <br> |
||||
if(isset($e-><strong>href</strong>)) <br> |
||||
echo <span class="var">'href exist!'</span>;<br> |
||||
</div> |
||||
</div> |
||||
<div id="frag_access_special"> |
||||
<div class="code"> <span class="comment">// Example</span><br> |
||||
<span class="hl-var">$</span><span class="hl-code">html = </span>str_get_html<span class="hl-brackets">(</span><span class="var">"<div>foo <b>bar</b></div>"</span><span class="hl-brackets">)</span><span class="hl-code">;</span> <br> |
||||
$e = $html->find(<span class="var">"div"</span>, <span class="var">0</span>);<br> |
||||
<br> |
||||
echo $e-><strong>tag</strong>; <span class="comment">// Returns: " <strong>div</strong>"</span><br> |
||||
echo $e-><strong>outertext</strong>; <span class="comment">// Returns: " <strong><div>foo <b>bar</b></div></strong>"</span><br> |
||||
echo $e-><strong>innertext</strong>; <span class="comment">// Returns: " <strong>foo <b>bar</b></strong>"</span><br> |
||||
echo $e-><strong>plaintext</strong>; <span class="comment">// Returns: " <strong>foo </strong><strong>bar</strong>"<br> |
||||
<br> |
||||
</span> |
||||
<table cellspacing="1" cellpadding="1"> |
||||
<tr bgcolor="#CCCCCC"> |
||||
<th width="25%">Attribute Name</th> |
||||
<th width="75%">Usage</th> |
||||
</tr> |
||||
<tr> |
||||
<td>$e-><strong>tag</strong></td> |
||||
<td>Read or write the <strong>tag name</strong> of element.</td> |
||||
</tr> |
||||
<tr> |
||||
<td>$e-><strong>outertext</strong></td> |
||||
<td>Read or write the <strong>outer HTML text </strong> of element.</td> |
||||
</tr> |
||||
<tr> |
||||
<td>$e-><strong>innertext</strong></td> |
||||
<td>Read or write the <strong>inner HTML text </strong> of element.</td> |
||||
</tr> |
||||
<tr> |
||||
<td>$e-><strong>plaintext</strong></td> |
||||
<td>Read or write the <strong>plain text </strong> of element.</td> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
</div> |
||||
<div id="frag_access_tips"> |
||||
<div class="code"><span class="comment">// <strong>Extract</strong> contents from HTML </span><br> |
||||
echo <strong>$html</strong>-><strong>plaintext</strong>;<br> |
||||
<br> |
||||
<span class="comment"> |
||||
// <strong>Wrap</strong> a element</span><br> |
||||
$e-><strong>outertext</strong> = <span class="var">'<div class="wrap">'</span> . $e-><strong>outertext</strong> . <span class="var">'<div></span>';<br> |
||||
<br> |
||||
<span class="comment">// <strong>Remove</strong> a element, set it's outertext as an empty string </span><br> |
||||
$e-><strong>outertext</strong> = <span class="var">''</span>;<br> |
||||
<br> |
||||
<span class="comment">// <strong>Append</strong> a element</span><br> |
||||
$e-><strong>outertext</strong> = $e-><strong>outertext</strong> . <span class="var">'<div>foo</span><span class="var"><div></span>';<br> |
||||
<br> |
||||
<span class="comment">// <strong>Insert</strong> a element</span><br> |
||||
$e-><strong>outertext</strong> = <span class="var">'<div>foo</span><span class="var"><div></span>' . $e-><strong>outertext</strong>;<br> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<a name="section_traverse"></a> |
||||
<h2>How to traverse the DOM tree?</h2> |
||||
<a class="top" href="#top">Top</a> |
||||
<div id="container_traverse"> |
||||
<ul> |
||||
<li><a href="#frag_traverse_background"><span>Background Knowledge</span></a></li> |
||||
<li><a href="#frag_traverse_traverse"><span>Traverse the DOM tree</span></a></li> |
||||
</ul> |
||||
<div id="frag_traverse_background"> |
||||
<div class="code"> <span class="comment">// If you are not so familiar with HTML DOM, check this <a href="http://php.net/manual/en/book.dom.php" target="_blank"><span class="var">link</span></a> to learn more... </span><br> |
||||
<br> |
||||
<span class="comment">// Example</span><br> |
||||
echo $html-><strong>find</strong>(<span class="var">"#div1", 0</span>)-><strong>children</strong>(<span class="var">1</span>)-><strong>children</strong>(<span class="var">1</span>)-><strong>children</strong>(<span class="var">2</span>)-><span class="var">id</span>;<br> |
||||
<span class="comment">// or</span> <br> |
||||
echo $html-><strong>getElementById</strong>(<span class="var">"div1"</span>)-><strong>childNodes</strong>(<span class="var">1</span>)-><strong>childNodes</strong>(<span class="var">1</span>)-><strong>childNodes</strong>(<span class="var">2</span>)-><strong>getAttribute</strong>(<span class="var">'id'</span>); </div> |
||||
</div> |
||||
<div id="frag_traverse_traverse"> |
||||
<div class="code">You can also call methods with <a href="manual_api.htm#camel"><span class="var">Camel naming convertions</span></a>.<br> |
||||
<table cellspacing="1" cellpadding="1"> |
||||
<tr> |
||||
<th> Method </th> |
||||
<th> Description</th> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">mixed</div>$e-><strong>children</strong> ( <span class="var">[int $index]</span> ) </td> |
||||
<td>Returns the Nth <strong>child object</strong> if <strong>index</strong> is set, otherwise return an <strong>array of children</strong>. </td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">element</div>$e-><strong>parent</strong> () </td> |
||||
<td>Returns the <strong>parent</strong> of element. </td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">element</div>$e-><strong>first_child</strong> () </td> |
||||
<td>Returns the <strong>first child</strong> of element, or <strong>null</strong> if not found. </td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">element</div>$e-><strong>last_child</strong> () </td> |
||||
<td>Returns the <strong>last child</strong> of element, or <strong>null</strong> if not found. </td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">element</div>$e-><strong>next_sibling</strong> () </td> |
||||
<td>Returns the <strong>next sibling</strong> of element, or<strong> null</strong> if not found. </td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">element</div>$e-><strong>prev_sibling</strong> () </td> |
||||
<td>Returns the <strong>previous sibling</strong> of element, or <strong>null</strong> if not found. </td> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
</div> |
||||
|
||||
</div> |
||||
<a name="section_dump"></a> |
||||
<h2>How to dump contents of DOM object?</h2> |
||||
<a class="top" href="#top">Top</a> |
||||
<div id="container_dump"> |
||||
<ul> |
||||
<li><a href="#frag_dump_quick"><span>Quick way</span></a></li> |
||||
<li><a href="#frag_dump_oo"><span>Object-oriented way</span></a></li> |
||||
</ul> |
||||
<div id="frag_dump_oo"> |
||||
<div class="code"><span class="comment">// </span><span class="comment">Dumps the internal DOM tree back into string </span><br> |
||||
$str = $html-><strong>save</strong>();<br> |
||||
<br> |
||||
<span class="comment">// Dumps the internal DOM tree back into a file</span> <br> |
||||
$html-><strong>save</strong>(<span class="var">'result.htm'</span>);</div> |
||||
</div> |
||||
<div id="frag_dump_quick"> |
||||
<div class="code"><span class="comment">// </span><span class="comment">Dumps the internal DOM tree back into string </span><br> |
||||
$str = $html;<br> |
||||
<br> |
||||
<span class="comment">// Print it!</span><br> |
||||
echo $html; <br> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<a name="section_callback"></a> |
||||
<h2>How to customize the parsing behavior?</h2> |
||||
<a class="top" href="#top">Top</a> |
||||
<div id="container_callback"> |
||||
<ul> |
||||
<li><a href="#frag_callback"><span>Callback function</span></a></li> |
||||
</ul> |
||||
<div id="frag_callback"> |
||||
<div class="code"><span class="comment">// Write a function with parameter "<strong>$element</strong>"</span><br> |
||||
function my_callback(<span class="var">$element</span>) {<br> |
||||
<span class="comment">// Hide all <b> tags </span><br> |
||||
if ($element->tag==<span class="var">'b'</span>)<br> |
||||
$element->outertext = '';<br> |
||||
} <br> |
||||
<br> |
||||
<span class="comment">// Register the callback function with it's <strong>function name</strong></span><br> |
||||
$html-><strong>set_callback</strong>(<span class="var">'my_callback'</span>);<br> |
||||
<br> |
||||
<span class="comment">// Callback function will be invoked while dumping</span><br> |
||||
echo $html; |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<div><br> |
||||
Author: S.C. Chen (me578022@gmail.com)<br> |
||||
Original idea is from Jose Solorzano's <a href="http://php-html.sourceforge.net/">HTML Parser for PHP 4</a>. <br> |
||||
Contributions by: Contributions by: Yousuke Kumakura, Vadim Voituk, Antcs<br> |
||||
</div> |
||||
</div> |
||||
</body> |
||||
</html> |
||||
<!--$Rev: 165 $--> |
||||
@ -0,0 +1,320 @@ |
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
||||
<html> |
||||
<head> |
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
||||
<title>PHP Simple HTML DOM Parser: API Reference</title> |
||||
<link href="css/default.css" rel="stylesheet" type="text/css"> |
||||
</head> |
||||
<body> |
||||
<h1><a name="top"></a>PHP Simple HTML DOM Parser Manual</h1> |
||||
<div id="content"> |
||||
<h2>Index</h2> |
||||
<ul> |
||||
<li><a href="manual.htm">Back</a></li> |
||||
<li><a href="#api">API Reference</a></li> |
||||
<li><a href="#camel">Camel naming conventions</a></li> |
||||
</ul> |
||||
<a name="api"></a> |
||||
<h2>API Reference</h2> |
||||
<a class="top" href="#top">Top</a> |
||||
<div class="code"> <strong>Helper</strong> functions |
||||
<table width="100%" cellpadding="1" cellspacing="1"> |
||||
<tr> |
||||
<th width="320">Name</th> |
||||
<th>Description</th> |
||||
</tr> |
||||
<tr> |
||||
<td><span class="returns">object</span> str_get_html ( <span class="var">string $content</span> )</td> |
||||
<td class="description">Creates a DOM object from a string.</td> |
||||
</tr> |
||||
<tr> |
||||
<td><span class="returns">object</span> file_get_html ( <span class="var">string $filename</span> )</td> |
||||
<td class="description">Creates a DOM object from a file or a URL.</td> |
||||
</tr> |
||||
</table> |
||||
<br> |
||||
<strong>DOM</strong> methods & properties <br> |
||||
<table width="100%" cellpadding="1" cellspacing="1"> |
||||
<tr> |
||||
<th width="320"> Name</th> |
||||
<th> Description</th> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">void</div> |
||||
__construct ( <span class="var">[string $filename]</span> )</td> |
||||
<td class="description">Constructor, set the filename parameter will automatically load the contents, either text or file/url.</td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">string</div> |
||||
plaintext</td> |
||||
<td class="description">Returns the contents extracted from HTML.</td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">void</div> |
||||
clear ()</td> |
||||
<td class="description">Clean up memory.</td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">void</div> |
||||
load ( <span class="var">string $content </span>)</td> |
||||
<td class="description"> Load contents from a <strong>string</strong>. </td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">string</div> |
||||
save ( <span class="var">[string $filename]</span> )</td> |
||||
<td class="description">Dumps the internal DOM tree back into a <strong>string</strong>. If the $filename is set, result string will save to file. </td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">void</div> |
||||
load_file (<span class="var"> string $filename</span> )</td> |
||||
<td class="description"> Load contents from a from a file or a URL.</td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">void</div> |
||||
set_callback ( <span class="var">string $function_name </span>)</td> |
||||
<td class="description">Set a callback function. </td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">mixed</div> |
||||
find (<span class="var"> string $selector [, int $index] </span>)</td> |
||||
<td class="description">Find elements by the CSS selector. Returns the Nth element <strong>object</strong> if <strong>index</strong> is set, otherwise return an <strong>array</strong> of object. </td> |
||||
</tr> |
||||
</table> |
||||
<br> |
||||
<strong>Element</strong> methods & properties <br> |
||||
<table width="100%" cellpadding="1" cellspacing="1"> |
||||
<tr> |
||||
<th width="320">Name</th> |
||||
<th>Description</th> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">string</div> |
||||
<span class="var">[attribute]</span></td> |
||||
<td class="description">Read or write element's attribure value. </td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">string</div> |
||||
tag</td> |
||||
<td class="description">Read or write the tag name of element.</td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">string</div> |
||||
outertext</td> |
||||
<td class="description">Read or write the outer HTML text of element.</td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">string</div> |
||||
innertext</td> |
||||
<td class="description">Read or write the inner HTML text of element.</td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">string</div> |
||||
plaintext</td> |
||||
<td class="description">Read or write the plain text of element.</td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">mixed</div> |
||||
find (<span class="var"> string $selector [, int $index] </span>)</td> |
||||
<td class="description">Find children by the CSS selector. Returns the Nth element <strong>object</strong> if <strong>index</strong> is set, otherwise, return an <strong>array</strong> of object. </td> |
||||
</tr> |
||||
</table> |
||||
<strong><br> |
||||
DOM</strong> traversing<br> |
||||
<table width="100%" cellpadding="1" cellspacing="1"> |
||||
<tr> |
||||
<th width="320">Name</th> |
||||
<th>Description</th> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">mixed</div> |
||||
$e->children ( <span class="var">[int $index]</span> ) </td> |
||||
<td class="description">Returns the Nth child <strong>object</strong> if <strong>index</strong> is set, otherwise return an <strong>array</strong> of children. </td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">element</div> |
||||
$e->parent () </td> |
||||
<td class="description">Returns the parent of element. </td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">element</div> |
||||
$e->first_child () </td> |
||||
<td class="description">Returns the first child of element, or <strong>null</strong> if not found. </td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">element</div> |
||||
$e->last_child () </td> |
||||
<td class="description">Returns the last child of element, or <strong>null</strong> if not found. </td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">element</div> |
||||
$e->next_sibling () </td> |
||||
<td class="description">Returns the next sibling of element, or<strong> null</strong> if not found. </td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<div class="returns">element</div> |
||||
$e->prev_sibling () </td> |
||||
<td class="description">Returns the previous sibling of element, or <strong>null</strong> if not found. </td> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
<a name="camel"></a> |
||||
<h2>Camel naming convertions</h2> |
||||
<a class="top" href="#top">Top</a> |
||||
<div class="code">You can also call methods with W3C STANDARD camel naming convertions.<br> |
||||
<br> |
||||
<table width="100%" cellpadding="1" cellspacing="1"> |
||||
<tr> |
||||
<th width="50%">Method</th> |
||||
<th>Mapping</th> |
||||
</tr> |
||||
<tr bgcolor="#EEEEEE"> |
||||
<td> |
||||
<div class="returns">array</div> |
||||
$e->getAllAttributes () </td> |
||||
<td> |
||||
<div class="returns">array</div> |
||||
$e-><span class="var">attr</span></td> |
||||
</tr> |
||||
<tr bgcolor="#EEEEEE"> |
||||
<td> |
||||
<div class="returns">string</div> |
||||
$e->getAttribute ( <span class="var">$name</span> ) </td> |
||||
<td> |
||||
<div class="returns">string</div> |
||||
$e-><span class="var">attribute</span></td> |
||||
</tr> |
||||
<tr bgcolor="#EEEEEE"> |
||||
<td> |
||||
<div class="returns">void</div> |
||||
$e->setAttribute ( <span class="var">$name, $value</span> ) </td> |
||||
<td> |
||||
<div class="returns">void</div> |
||||
$value = $e-><span class="var">attribute</span></td> |
||||
</tr> |
||||
<tr bgcolor="#EEEEEE"> |
||||
<td> |
||||
<div class="returns">bool</div> |
||||
$e->hasAttribute ( <span class="var">$name</span> ) </td> |
||||
<td> |
||||
<div class="returns">bool</div> |
||||
isset($e-><span class="var">attribute</span>)</td> |
||||
</tr> |
||||
<tr bgcolor="#EEEEEE"> |
||||
<td> |
||||
<div class="returns">void</div> |
||||
$e->removeAttribute ( <span class="var">$name</span> ) </td> |
||||
<td> |
||||
<div class="returns">void</div> |
||||
$e-><span class="var">attribute</span> = null</td> |
||||
</tr> |
||||
<tr bgcolor="#EEEEEE"> |
||||
<td> |
||||
<div class="returns">element</div> |
||||
$e->getElementById ( <span class="var">$id</span> ) </td> |
||||
<td> |
||||
<div class="returns">mixed</div> |
||||
$e->find (<span class="var"> "#$id", 0 </span>)</td> |
||||
</tr> |
||||
<tr bgcolor="#EEEEEE"> |
||||
<td> |
||||
<div class="returns">mixed</div> |
||||
$e->getElementsById ( <span class="var">$id [,$index] </span> ) </td> |
||||
<td> |
||||
<div class="returns">mixed</div> |
||||
$e->find (<span class="var"> "#$id" [, int $index] </span>)</td> |
||||
</tr> |
||||
<tr bgcolor="#EEEEEE"> |
||||
<td> |
||||
<div class="returns">element</div> |
||||
$e->getElementByTagName (<span class="var">$name</span> ) </td> |
||||
<td> |
||||
<div class="returns">mixed</div> |
||||
$e->find (<span class="var"> $name, 0 </span>)</td> |
||||
</tr> |
||||
<tr bgcolor="#EEEEEE"> |
||||
<td> |
||||
<div class="returns">mixed</div> |
||||
$e->getElementsByTagName ( <span class="var">$name [, $index]</span> ) </td> |
||||
<td> |
||||
<div class="returns">mixed</div> |
||||
$e->find (<span class="var"> $name [, int $index] </span>)</td> |
||||
</tr> |
||||
<tr bgcolor="#EEEEEE"> |
||||
<td> |
||||
<div class="returns">element</div> |
||||
$e->parentNode () </td> |
||||
<td> |
||||
<div class="returns">element</div> |
||||
$e->parent () </td> |
||||
</tr> |
||||
<tr bgcolor="#EEEEEE"> |
||||
<td> |
||||
<div class="returns">mixed</div> |
||||
$e->childNodes ( <span class="var">[$index]</span> ) </td> |
||||
<td> |
||||
<div class="returns">mixed</div> |
||||
$e->children ( <span class="var">[int $index]</span> ) </td> |
||||
</tr> |
||||
<tr bgcolor="#EEEEEE"> |
||||
<td> |
||||
<div class="returns">element</div> |
||||
$e->firstChild () </td> |
||||
<td> |
||||
<div class="returns">element</div> |
||||
$e->first_child () </td> |
||||
</tr> |
||||
<tr bgcolor="#EEEEEE"> |
||||
<td> |
||||
<div class="returns">element</div> |
||||
$e->lastChild () </td> |
||||
<td> |
||||
<div class="returns">element</div> |
||||
$e->last_child () </td> |
||||
</tr> |
||||
<tr bgcolor="#EEEEEE"> |
||||
<td> |
||||
<div class="returns">element</div> |
||||
$e->nextSibling () </td> |
||||
<td> |
||||
<div class="returns">element</div> |
||||
$e->next_sibling () </td> |
||||
</tr> |
||||
<tr bgcolor="#EEEEEE"> |
||||
<td> |
||||
<div class="returns">element</div> |
||||
$e->previousSibling () </td> |
||||
<td> |
||||
<div class="returns">element</div> |
||||
$e->prev_sibling () </td> |
||||
</tr> |
||||
</table> |
||||
</div> |
||||
<div><br> |
||||
Author: S.C. Chen (me578022@gmail.com)<br> |
||||
Original idea is from Jose Solorzano's <a href="http://php-html.sourceforge.net/">HTML Parser for PHP 4</a>. <br> |
||||
Contributions by: Contributions by: Yousuke Kumakura, Vadim Voituk, Antcs<br> |
||||
</div> |
||||
</div> |
||||
</body> |
||||
</html> |
||||
<!--$Rev: 165 $--> |
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,24 @@ |
||||
<?php |
||||
// $Rev: 175 $ |
||||
error_reporting(E_ALL); |
||||
|
||||
function quick_test($html_dom, $str, $selector, $params=array('inner'=>'', 'plain'=>'', 'outer'=>'')) { |
||||
$html_dom->load($str); |
||||
$e = $html_dom->find($selector, 0); |
||||
if (isset($params['inner'])) |
||||
assert($e->innertext===$params['inner']); |
||||
if (isset($params['plain'])) |
||||
assert($e->plaintext===$params['plain']); |
||||
if (isset($params['outer'])) |
||||
assert($e->outertext===$params['outer']); |
||||
assert($html_dom==$str); |
||||
} |
||||
|
||||
foreach (new DirectoryIterator(getcwd()) as $entry) { |
||||
if ($entry->isFile() && strpos($entry, '_testcase.')>0) { |
||||
echo basename($entry); |
||||
require_once($entry); |
||||
echo '<br>...pass!<br><br>'; |
||||
} |
||||
} |
||||
?> |
||||
@ -0,0 +1,74 @@ |
||||
<?php |
||||
// $Rev: 179 $ |
||||
// ----------------------------------------------------------------------------- |
||||
// setup |
||||
error_reporting(E_ALL); |
||||
require_once('../simple_html_dom.php'); |
||||
$dom = new simple_html_dom; |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// test problem of last emelemt not found |
||||
$str = <<<HTML |
||||
<img src="src0"><p>foo</p><img src="src2"> |
||||
HTML; |
||||
|
||||
function callback_1($e) { |
||||
if ($e->tag==='img') |
||||
$e->outertext = ''; |
||||
} |
||||
|
||||
$dom->load($str); |
||||
$dom->set_callback('callback_1'); |
||||
assert($dom=='<p>foo</p>'); |
||||
|
||||
// ----------------------------------------------- |
||||
// innertext test |
||||
function callback_2($e) { |
||||
if ($e->tag==='p') |
||||
$e->innertext = 'bar'; |
||||
} |
||||
|
||||
$dom->load($str); |
||||
$dom->set_callback('callback_2'); |
||||
assert($dom=='<img src="src0"><p>bar</p><img src="src2">'); |
||||
|
||||
// ----------------------------------------------- |
||||
// attributes test |
||||
function callback_3($e) { |
||||
if ($e->tag==='img') |
||||
$e->src = 'foo'; |
||||
} |
||||
|
||||
$dom->load($str); |
||||
$dom->set_callback('callback_3'); |
||||
assert($dom=='<img src="foo"><p>foo</p><img src="foo">'); |
||||
|
||||
function callback_4($e) { |
||||
if ($e->tag==='img') |
||||
$e->id = 'foo'; |
||||
} |
||||
|
||||
$dom->set_callback('callback_4'); |
||||
assert($dom=='<img src="foo" id="foo"><p>foo</p><img src="foo" id="foo">'); |
||||
|
||||
// ----------------------------------------------- |
||||
// attributes test2 |
||||
//$dom = str_get_dom($str); |
||||
$dom->load($str); |
||||
$dom->remove_callback(); |
||||
$dom->find('img', 0)->id = "foo"; |
||||
assert($dom=='<img src="src0" id="foo"><p>foo</p><img src="src2">'); |
||||
|
||||
function callback_5($e) { |
||||
if ($e->src==='src0') |
||||
unset($e->id); |
||||
} |
||||
|
||||
$dom->set_callback('callback_5'); |
||||
assert($dom==$str); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// tear down |
||||
$dom->clear(); |
||||
unset($dom); |
||||
?> |
||||
@ -0,0 +1,386 @@ |
||||
<?php |
||||
// $Rev: 180 $ |
||||
// ----------------------------------------------------------------------------- |
||||
// setup |
||||
error_reporting(E_ALL); |
||||
require_once('../simple_html_dom.php'); |
||||
$html = new simple_html_dom; |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// DOM tree test |
||||
$html->load(''); |
||||
$e = $html->root; |
||||
assert($e->first_child()==null); |
||||
assert($e->last_child()==null); |
||||
assert($e->next_sibling()==null); |
||||
assert($e->prev_sibling()==null); |
||||
// ----------------------------------------------- |
||||
$str = '<div id="div1"></div>'; |
||||
$html->load($str); |
||||
|
||||
$e = $html->root; |
||||
assert($e->first_child()->id=='div1'); |
||||
assert($e->last_child()->id=='div1'); |
||||
assert($e->next_sibling()==null); |
||||
assert($e->prev_sibling()==null); |
||||
assert($e->plaintext==''); |
||||
assert($e->innertext=='<div id="div1"></div>'); |
||||
assert($e->outertext==$str); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<div id="div1"> |
||||
<div id="div10"></div> |
||||
<div id="div11"></div> |
||||
<div id="div12"></div> |
||||
</div> |
||||
HTML; |
||||
$html->load($str); |
||||
assert($html==$str); |
||||
|
||||
$e = $html->find('div#div1', 0); |
||||
assert(isset($e->id)==true); |
||||
assert(isset($e->_not_exist)==false); |
||||
assert($e->first_child()->id=='div10'); |
||||
assert($e->last_child()->id=='div12'); |
||||
assert($e->next_sibling()==null); |
||||
assert($e->prev_sibling()==null); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<div id="div0"> |
||||
<div id="div00"></div> |
||||
</div> |
||||
<div id="div1"> |
||||
<div id="div10"></div> |
||||
<div id="div11"></div> |
||||
<div id="div12"></div> |
||||
</div> |
||||
<div id="div2"></div> |
||||
HTML; |
||||
$html->load($str); |
||||
assert($html==$str); |
||||
|
||||
$e = $html->find('div#div1', 0); |
||||
assert($e->first_child()->id=='div10'); |
||||
assert($e->last_child()->id=='div12'); |
||||
assert($e->next_sibling()->id=='div2'); |
||||
assert($e->prev_sibling()->id=='div0'); |
||||
|
||||
$e = $html->find('div#div2', 0); |
||||
assert($e->first_child()==null); |
||||
assert($e->last_child()==null); |
||||
|
||||
$e = $html->find('div#div0 div#div00', 0); |
||||
assert($e->first_child()==null); |
||||
assert($e->last_child()==null); |
||||
assert($e->next_sibling()==null); |
||||
assert($e->prev_sibling()==null); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<div id="div0"> |
||||
<div id="div00"></div> |
||||
</div> |
||||
<div id="div1"> |
||||
<div id="div10"></div> |
||||
<div id="div11"> |
||||
<div id="div110"></div> |
||||
<div id="div111"> |
||||
<div id="div1110"></div> |
||||
<div id="div1111"></div> |
||||
<div id="div1112"></div> |
||||
</div> |
||||
<div id="div112"></div> |
||||
</div> |
||||
<div id="div12"></div> |
||||
</div> |
||||
<div id="div2"></div> |
||||
HTML; |
||||
$html->load($str); |
||||
assert($html==$str); |
||||
|
||||
assert($html->find("#div1", 0)->id=='div1'); |
||||
assert($html->find("#div1", 0)->children(0)->id=='div10'); |
||||
assert($html->find("#div1", 0)->children(1)->children(1)->id=='div111'); |
||||
assert($html->find("#div1", 0)->children(1)->children(1)->children(2)->id=='div1112'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// no value attr test |
||||
$str = <<<HTML |
||||
<form name="form1" method="post" action=""> |
||||
<input type="checkbox" name="checkbox0" checked value="checkbox0">aaa<br> |
||||
<input type="checkbox" name="checkbox1" value="checkbox1">bbb<br> |
||||
<input type="checkbox" name="checkbox2" value="checkbox2" checked>ccc<br> |
||||
</form> |
||||
HTML; |
||||
$html->load($str); |
||||
assert($html==$str); |
||||
|
||||
$counter = 0; |
||||
foreach($html->find('input[type=checkbox]') as $checkbox) { |
||||
if (isset($checkbox->checked)) { |
||||
assert($checkbox->value=="checkbox$counter"); |
||||
$counter += 2; |
||||
} |
||||
} |
||||
|
||||
$counter = 0; |
||||
foreach($html->find('input[type=checkbox]') as $checkbox) { |
||||
if ($checkbox->checked) { |
||||
assert($checkbox->value=="checkbox$counter"); |
||||
$counter += 2; |
||||
} |
||||
} |
||||
|
||||
$es = $html->find('input[type=checkbox]'); |
||||
$es[1]->checked = true; |
||||
assert($es[1]->outertext=='<input type="checkbox" name="checkbox1" value="checkbox1" checked>'); |
||||
$es[0]->checked = false; |
||||
assert($es[0]=='<input type="checkbox" name="checkbox0" value="checkbox0">'); |
||||
$es[0]->checked = true; |
||||
assert($es[0]->outertext=='<input type="checkbox" name="checkbox0" checked value="checkbox0">'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// remove attr test |
||||
$str = <<<HTML |
||||
<input type="checkbox" name="checkbox0"> |
||||
<input type = "checkbox" name = 'checkbox1' value = "checkbox1"> |
||||
HTML; |
||||
|
||||
$html->load($str); |
||||
assert($html==$str); |
||||
$e = $html->find('[name=checkbox0]', 0); |
||||
$e->name = null; |
||||
assert($e=='<input type="checkbox">'); |
||||
$e->type = null; |
||||
assert($e=='<input>'); |
||||
|
||||
// ----------------------------------------------- |
||||
$html->load($str); |
||||
assert($html==$str); |
||||
$e = $html->find('[name=checkbox0]', 0); |
||||
$e->name = null; |
||||
assert($e=='<input type="checkbox">'); |
||||
$e->type = null; |
||||
assert($e=='<input>'); |
||||
|
||||
// ----------------------------------------------- |
||||
$html->load($str); |
||||
assert($html==$str); |
||||
$e = $html->find('[name=checkbox1]', 0); |
||||
$e->value = null; |
||||
assert($e=="<input type = \"checkbox\" name = 'checkbox1'>"); |
||||
$e->type = null; |
||||
assert($e=="<input name = 'checkbox1'>"); |
||||
$e->name = null; |
||||
assert($e=='<input>'); |
||||
|
||||
$html->load($str); |
||||
assert($html==$str); |
||||
$e = $html->find('[name=checkbox1]', 0); |
||||
$e->type = null; |
||||
assert($e=="<input name = 'checkbox1' value = \"checkbox1\">"); |
||||
$e->name = null; |
||||
assert($e=='<input value = "checkbox1">'); |
||||
$e->value = null; |
||||
assert($e=='<input>'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// remove no value attr test |
||||
$str = <<<HTML |
||||
<input type="checkbox" checked name='checkbox0'> |
||||
<input type="checkbox" name='checkbox1' checked> |
||||
HTML; |
||||
$html->load($str); |
||||
assert($html==$str); |
||||
$e = $html->find('[name=checkbox1]', 0); |
||||
$e->type = NULL; |
||||
assert($e=="<input name='checkbox1' checked>"); |
||||
$e->name = null; |
||||
assert($e=="<input checked>"); |
||||
$e->checked = NULL; |
||||
assert($e=="<input>"); |
||||
|
||||
// ----------------------------------------------- |
||||
$html->load($str); |
||||
assert($html==$str); |
||||
$e = $html->find('[name=checkbox0]', 0); |
||||
$e->type = NULL; |
||||
assert($e=="<input checked name='checkbox0'>"); |
||||
$e->name = NULL; |
||||
assert($e=='<input checked>'); |
||||
$e->checked = NULL; |
||||
assert($e=='<input>'); |
||||
|
||||
$html->load($str); |
||||
assert($html==$str); |
||||
$e = $html->find('[name=checkbox0]', 0); |
||||
$e->checked = NULL; |
||||
assert($e=="<input type=\"checkbox\" name='checkbox0'>"); |
||||
$e->name = NULL; |
||||
assert($e=='<input type="checkbox">'); |
||||
$e->type = NULL; |
||||
assert($e=="<input>"); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// extract text |
||||
$str = <<<HTML |
||||
<b>okok</b> |
||||
HTML; |
||||
$html->load($str); |
||||
assert($html==$str); |
||||
assert($html->plaintext=='okok'); |
||||
|
||||
$str = <<<HTML |
||||
<div><b>okok</b></div> |
||||
HTML; |
||||
$html->load($str); |
||||
assert($html==$str); |
||||
assert($html->plaintext=='okok'); |
||||
|
||||
$str = <<<HTML |
||||
<div><b>okok</b> |
||||
HTML; |
||||
$html->load($str); |
||||
assert($html==$str); |
||||
assert($html->plaintext=='okok'); |
||||
|
||||
$str = <<<HTML |
||||
<b>okok</b></div> |
||||
HTML; |
||||
$html->load($str); |
||||
assert($html==$str); |
||||
assert($html->plaintext=='okok</div>'); |
||||
|
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// old fashion camel naming conventions test |
||||
$str = <<<HTML |
||||
<input type="checkbox" id="checkbox" name="checkbox" value="checkbox" checked> |
||||
<input type="checkbox" id="checkbox1" name="checkbox1" value="checkbox1"> |
||||
<input type="checkbox" id="checkbox2" name="checkbox2" value="checkbox2" checked> |
||||
HTML; |
||||
$html->load($str); |
||||
assert($html==$str); |
||||
|
||||
assert($html->getElementByTagName('input')->hasAttribute('checked')==true); |
||||
assert($html->getElementsByTagName('input', 1)->hasAttribute('checked')==false); |
||||
assert($html->getElementsByTagName('input', 1)->hasAttribute('not_exist')==false); |
||||
|
||||
assert($html->find('input', 0)->value==$html->getElementByTagName('input')->getAttribute('value')); |
||||
assert($html->find('input', 1)->value==$html->getElementsByTagName('input', 1)->getAttribute('value')); |
||||
|
||||
assert($html->find('#checkbox1', 0)->value==$html->getElementById('checkbox1')->getAttribute('value')); |
||||
assert($html->find('#checkbox2', 0)->value==$html->getElementsById('checkbox2', 0)->getAttribute('value')); |
||||
|
||||
$e = $html->find('[name=checkbox]', 0); |
||||
assert($e->getAttribute('value')=='checkbox'); |
||||
assert($e->getAttribute('checked')==true); |
||||
assert($e->getAttribute('not_exist')==''); |
||||
|
||||
$e->setAttribute('value', 'okok'); |
||||
assert($e=='<input type="checkbox" id="checkbox" name="checkbox" value="okok" checked>'); |
||||
|
||||
$e->setAttribute('checked', false); |
||||
assert($e=='<input type="checkbox" id="checkbox" name="checkbox" value="okok">'); |
||||
|
||||
$e->setAttribute('checked', true); |
||||
assert($e=='<input type="checkbox" id="checkbox" name="checkbox" value="okok" checked>'); |
||||
|
||||
$e->removeAttribute('value'); |
||||
assert($e=='<input type="checkbox" id="checkbox" name="checkbox" checked>'); |
||||
|
||||
$e->removeAttribute('checked'); |
||||
assert($e=='<input type="checkbox" id="checkbox" name="checkbox">'); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<div id="div1"> |
||||
<div id="div10"></div> |
||||
<div id="div11"></div> |
||||
<div id="div12"></div> |
||||
</div> |
||||
HTML; |
||||
$html->load($str); |
||||
assert($html==$str); |
||||
|
||||
$e = $html->find('div#div1', 0); |
||||
assert($e->firstChild()->getAttribute('id')=='div10'); |
||||
assert($e->lastChild()->getAttribute('id')=='div12'); |
||||
assert($e->nextSibling()==null); |
||||
assert($e->previousSibling()==null); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<div id="div0"> |
||||
<div id="div00"></div> |
||||
</div> |
||||
<div id="div1"> |
||||
<div id="div10"></div> |
||||
<div id="div11"> |
||||
<div id="div110"></div> |
||||
<div id="div111"> |
||||
<div id="div1110"></div> |
||||
<div id="div1111"></div> |
||||
<div id="div1112"></div> |
||||
</div> |
||||
<div id="div112"></div> |
||||
</div> |
||||
<div id="div12"></div> |
||||
</div> |
||||
<div id="div2"></div> |
||||
HTML; |
||||
$html->load($str); |
||||
assert($html==$str); |
||||
|
||||
assert($html->getElementById("div1")->hasAttribute('id')==true); |
||||
assert($html->getElementById("div1")->hasAttribute('not_exist')==false); |
||||
|
||||
assert($html->getElementById("div1")->getAttribute('id')=='div1'); |
||||
assert($html->getElementById("div1")->childNodes(0)->getAttribute('id')=='div10'); |
||||
assert($html->getElementById("div1")->childNodes(1)->childNodes(1)->getAttribute('id')=='div111'); |
||||
assert($html->getElementById("div1")->childNodes(1)->childNodes(1)->childNodes(2)->getAttribute('id')=='div1112'); |
||||
|
||||
assert($html->getElementsById("div1", 0)->childNodes(1)->id=='div11'); |
||||
assert($html->getElementsById("div1", 0)->childNodes(1)->childNodes(1)->getAttribute('id')=='div111'); |
||||
assert($html->getElementsById("div1", 0)->childNodes(1)->childNodes(1)->childNodes(1)->getAttribute('id')=='div1111'); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<ul class="menublock"> |
||||
</li> |
||||
<ul> |
||||
<li> |
||||
<a href="http://www.cyberciti.biz/tips/pollsarchive">Polls Archive</a> |
||||
</li> |
||||
</ul> |
||||
</li> |
||||
</ul> |
||||
HTML; |
||||
$html->load($str); |
||||
|
||||
$ul = $html->find('ul', 0); |
||||
assert($ul->first_child()->tag==='ul'); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<ul> |
||||
<li>Item 1 |
||||
<ul> |
||||
<li>Sub Item 1 </li> |
||||
<li>Sub Item 2 </li> |
||||
</ul> |
||||
</li> |
||||
<li>Item 2 </li> |
||||
</ul> |
||||
HTML; |
||||
|
||||
$html->load($str); |
||||
assert($html==$str); |
||||
|
||||
$ul = $html->find('ul', 0); |
||||
assert($ul->first_child()->tag==='li'); |
||||
assert($ul->first_child()->next_sibling()->tag==='li'); |
||||
// ----------------------------------------------------------------------------- |
||||
// tear down |
||||
$html->clear(); |
||||
unset($html); |
||||
?> |
||||
@ -0,0 +1,247 @@ |
||||
<?php |
||||
// ----------------------------------------------------------------------------- |
||||
// setup |
||||
error_reporting(E_ALL); |
||||
require_once('../simple_html_dom.php'); |
||||
$dom = new simple_html_dom; |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// innertext test |
||||
$str = <<<HTML |
||||
<html> |
||||
<head></head> |
||||
<body> |
||||
<br> |
||||
<span>foo</span> |
||||
</body> |
||||
</html> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom==$str); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<html> |
||||
<head></head> |
||||
<body> |
||||
<br> |
||||
<span>bar</span> |
||||
</body> |
||||
</html> |
||||
HTML; |
||||
$dom->load($str); |
||||
$dom->find('span', 0)->innertext = 'bar'; |
||||
assert($dom==$str); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<html> |
||||
<head>ok</head> |
||||
<body> |
||||
<br> |
||||
<span>bar</span> |
||||
</body> |
||||
</html> |
||||
HTML; |
||||
$dom->load($str); |
||||
$dom->find('head', 0)->innertext = 'ok'; |
||||
assert($dom==$str); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<b>foo</b> |
||||
HTML; |
||||
$dom->load($str); |
||||
|
||||
$e = $dom->find('b text', 0); |
||||
assert($e->innertext=='foo'); |
||||
assert($e->outertext=='foo'); |
||||
$e->innertext = 'bar'; |
||||
assert($e->innertext=='bar'); |
||||
assert($e->outertext=='bar'); |
||||
$e = $dom->find('b', 0); |
||||
assert($e->innertext=='bar'); |
||||
assert($e->outertext=='<b>bar</b>'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// outertext test |
||||
$str = <<<HTML |
||||
<table> |
||||
<tr><th>Head1</th><th>Head2</th><th>Head3</th></tr> |
||||
<tr><td>1</td><td>2</td><td>3</td></tr> |
||||
</table> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('tr', 0)->outertext=='<tr><th>Head1</th><th>Head2</th><th>Head3</th></tr>'); |
||||
assert($dom->find('tr', 1)->outertext=='<tr><td>1</td><td>2</td><td>3</td></tr>'); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<table><tr><th>Head1</th><th>Head2</th><th>Head3</th><tr><td>1</td><td>2</td><td>3</td></table> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('tr', 0)->outertext=='<tr><th>Head1</th><th>Head2</th><th>Head3</th>'); |
||||
assert($dom->find('tr', 1)->outertext=='<tr><td>1</td><td>2</td><td>3</td>'); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<ul><li><b>li11</b></li><li><b>li12</b></li></ul><ul><li><b>li21</b></li><li><b>li22</b></li></ul> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('ul', 0)->outertext=='<ul><li><b>li11</b></li><li><b>li12</b></li></ul>'); |
||||
assert($dom->find('ul', 1)->outertext=='<ul><li><b>li21</b></li><li><b>li22</b></li></ul>'); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<ul><li><b>li11</b></li><li><b>li12</b></li><ul><li><b>li21</b></li><li><b>li22</b></li> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('ul', 0)->outertext=='<ul><li><b>li11</b></li><li><b>li12</b></li><ul><li><b>li21</b></li><li><b>li22</b></li>'); |
||||
assert($dom->find('ul', 1)->outertext=='<ul><li><b>li21</b></li><li><b>li22</b></li>'); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<ul><li><b>li11</b><li><b>li12</b></li><ul><li><b>li21</b></li><li><b>li22</b> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('ul', 0)->outertext=='<ul><li><b>li11</b><li><b>li12</b></li><ul><li><b>li21</b></li><li><b>li22</b>'); |
||||
assert($dom->find('ul', 1)->outertext=='<ul><li><b>li21</b></li><li><b>li22</b>'); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<table> |
||||
<tr><th>Head1</th><th>Head2</th><th>Head3</th></tr> |
||||
<tr><td>1</td><td>2</td><td>3</td></tr> |
||||
</table> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('tr', 0)->outertext=='<tr><th>Head1</th><th>Head2</th><th>Head3</th></tr>'); |
||||
assert($dom->find('tr', 1)->outertext=='<tr><td>1</td><td>2</td><td>3</td></tr>'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// replacement test |
||||
$str = <<<HTML |
||||
<div class="class1" id="id2" ><div class="class2">ok</div></div> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('div'); |
||||
assert(count($es)==2); |
||||
assert($es[0]->innertext=='<div class="class2">ok</div>'); |
||||
assert($es[0]->outertext=='<div class="class1" id="id2" ><div class="class2">ok</div></div>'); |
||||
|
||||
// test isset |
||||
$es[0]->class = 'class_test'; |
||||
assert(isset($es[0]->class)===true); |
||||
assert(isset($es[0]->okok)===false); |
||||
|
||||
// test replacement |
||||
$es[0]->class = 'class_test'; |
||||
assert($es[0]->outertext=='<div class="class_test" id="id2" ><div class="class2">ok</div></div>'); |
||||
|
||||
// test replacement |
||||
$es[0]->tag = 'span'; |
||||
assert($es[0]->outertext=='<span class="class_test" id="id2" ><div class="class2">ok</div></span>'); |
||||
|
||||
// test unset (no more support...) |
||||
//$dom = str_get_dom($str); |
||||
//$es = $dom->find('div'); |
||||
//unset($es[0]->class); |
||||
//assert($es[0]->outertext=='<div id="id2" ><div class="class2">ok</div></div>'); |
||||
|
||||
$dom->load($str); |
||||
$es = $dom->find('div'); |
||||
unset($es[0]->attr['class']); |
||||
assert($es[0]->outertext=='<div id="id2" ><div class="class2">ok</div></div>'); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<select name=something><options>blah</options><options>blah2</options></select> |
||||
HTML; |
||||
$dom->load($str); |
||||
$e = $dom->find('select[name=something]', 0); |
||||
$e->innertext = ''; |
||||
assert($e->outertext =='<select name=something></select>'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// nested replacement test |
||||
$str = <<<HTML |
||||
<div class="class0" id="id0" ><div class="class1">ok</div></div> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('div'); |
||||
assert(count($es)==2); |
||||
assert($es[0]->innertext=='<div class="class1">ok</div>'); |
||||
assert($es[0]->outertext=='<div class="class0" id="id0" ><div class="class1">ok</div></div>'); |
||||
assert($es[1]->innertext=='ok'); |
||||
assert($es[1]->outertext=='<div class="class1">ok</div>'); |
||||
|
||||
// test replacement |
||||
$es[1]->innertext = 'okok'; |
||||
assert($es[1]->outertext=='<div class="class1">okok</div>'); |
||||
assert($es[0]->outertext=='<div class="class0" id="id0" ><div class="class1">okok</div></div>'); |
||||
assert($dom=='<div class="class0" id="id0" ><div class="class1">okok</div></div>'); |
||||
|
||||
$es[1]->class = 'class_test'; |
||||
assert($es[1]->outertext=='<div class="class_test">okok</div>'); |
||||
assert($es[0]->outertext=='<div class="class0" id="id0" ><div class="class_test">okok</div></div>'); |
||||
assert($dom=='<div class="class0" id="id0" ><div class="class_test">okok</div></div>'); |
||||
|
||||
$es[0]->class = 'class_test'; |
||||
assert($es[0]->outertext=='<div class="class_test" id="id0" ><div class="class_test">okok</div></div>'); |
||||
assert($dom=='<div class="class_test" id="id0" ><div class="class_test">okok</div></div>'); |
||||
|
||||
$es[0]->innertext = 'okokok'; |
||||
assert($es[0]->outertext=='<div class="class_test" id="id0" >okokok</div>'); |
||||
assert($dom=='<div class="class_test" id="id0" >okokok</div>'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// <p> test |
||||
$str = <<<HTML |
||||
<div class="class0"> |
||||
<p>ok0<a href="#">link0</a></p> |
||||
<div class="class1"><p>ok1<a href="#">link1</a></p></div> |
||||
<div class="class2"></div> |
||||
<p>ok2<a href="#">link2</a></p> |
||||
</div> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('p'); |
||||
assert($es[0]->innertext=='ok0<a href="#">link0</a>'); |
||||
assert($es[1]->innertext=='ok1<a href="#">link1</a>'); |
||||
assert($es[2]->innertext=='ok2<a href="#">link2</a>'); |
||||
assert($dom->find('p', 0)->plaintext=='ok0link0'); |
||||
assert($dom->find('p', 1)->plaintext=='ok1link1'); |
||||
assert($dom->find('p', 2)->plaintext=='ok2link2'); |
||||
|
||||
$count = 0; |
||||
foreach($dom->find('p') as $p) { |
||||
$a = $p->find('a'); |
||||
assert($a[0]->innertext=='link'.$count); |
||||
++$count; |
||||
} |
||||
|
||||
$es = $dom->find('p a'); |
||||
assert($es[0]->innertext=='link0'); |
||||
assert($es[1]->innertext=='link1'); |
||||
assert($es[2]->innertext=='link2'); |
||||
assert($dom->find('p a', 0)->plaintext=='link0'); |
||||
assert($dom->find('p a', 1)->plaintext=='link1'); |
||||
assert($dom->find('p a', 2)->plaintext=='link2'); |
||||
|
||||
assert($dom==$str); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// <embed> test |
||||
$str = <<<HTML |
||||
<EMBED |
||||
SRC="../graphics/sounds/1812over.mid" |
||||
HEIGHT=60 WIDTH=144> |
||||
HTML; |
||||
$dom->load($str); |
||||
$e = $dom->find('embed', 0); |
||||
assert($e->src=='../graphics/sounds/1812over.mid'); |
||||
assert($e->height=='60'); |
||||
assert($e->width=='144'); |
||||
assert($dom==strtolower($str)); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// tear down |
||||
$dom->clear(); |
||||
unset($dom); |
||||
?> |
||||
@ -0,0 +1,658 @@ |
||||
<?php |
||||
// ----------------------------------------------------------------------------- |
||||
// setup |
||||
error_reporting(E_ALL); |
||||
require_once('../simple_html_dom.php'); |
||||
$dom = new simple_html_dom; |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
//self-closing tags test |
||||
$str = <<<HTML |
||||
<hr> |
||||
HTML; |
||||
$dom->load($str); |
||||
$e = $dom->find('hr', 0); |
||||
$e->id= 'foo'; |
||||
assert($e->outertext=='<hr id="foo">'); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<hr/> |
||||
HTML; |
||||
$dom->load($str); |
||||
$e = $dom->find('hr', 0); |
||||
$e->id= 'foo'; |
||||
assert($e->outertext=='<hr id="foo"/>'); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<hr /> |
||||
HTML; |
||||
$dom->load($str); |
||||
$e = $dom->find('hr', 0); |
||||
$e->id= 'foo'; |
||||
assert($e->outertext=='<hr id="foo" />'); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<hr> |
||||
HTML; |
||||
$dom->load($str); |
||||
$e = $dom->find('hr', 0); |
||||
$e->id= 'foo'; |
||||
$e->class = 'bar'; |
||||
assert($e->outertext=='<hr id="foo" class="bar">'); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<hr/> |
||||
HTML; |
||||
$dom->load($str); |
||||
$e = $dom->find('hr', 0); |
||||
$e->id= 'foo'; |
||||
$e->class = 'bar'; |
||||
assert($e->outertext=='<hr id="foo" class="bar"/>'); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<hr /> |
||||
HTML; |
||||
$dom->load($str); |
||||
$e = $dom->find('hr', 0); |
||||
$e->id= 'foo'; |
||||
$e->class = 'bar'; |
||||
assert($e->outertext=='<hr id="foo" class="bar" />'); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<hr id="foo" kk=ll> |
||||
HTML; |
||||
$dom->load($str); |
||||
$e = $dom->find('hr', 0); |
||||
$e->class = 'bar'; |
||||
assert($e->outertext=='<hr id="foo" kk=ll class="bar">'); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<hr id="foo" kk="ll"/> |
||||
HTML; |
||||
$dom->load($str); |
||||
$e = $dom->find('hr', 0); |
||||
$e->class = 'bar'; |
||||
assert($e->outertext=='<hr id="foo" kk="ll" class="bar"/>'); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<hr id="foo" kk=ll /> |
||||
HTML; |
||||
$dom->load($str); |
||||
$e = $dom->find('hr', 0); |
||||
$e->class = 'bar'; |
||||
assert($e->outertext=='<hr id="foo" kk=ll class="bar" />'); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<div><nobr></div> |
||||
HTML; |
||||
$dom->load($str); |
||||
$e = $dom->find('nobr', 0); |
||||
assert($e->outertext=='<nobr>'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// optional closing tags test |
||||
$str = <<<HTML |
||||
<body> |
||||
</b><.b></a> |
||||
</body> |
||||
HTML; |
||||
$dom = str_get_html($str); |
||||
assert($dom->find('body', 0)->outertext==$str); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<html> |
||||
<body> |
||||
<a>foo</a> |
||||
<a>foo2</a> |
||||
HTML; |
||||
$dom = str_get_html($str); |
||||
assert($dom==$str); |
||||
assert($dom->find('html body a', 1)->innertext=='foo2'); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
HTML; |
||||
$dom = str_get_html($str); |
||||
assert($dom==$str); |
||||
assert($dom->find('html a', 1)===null); |
||||
//assert($dom->find('html a', 1)->innertext=='foo2'); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<body> |
||||
<div> |
||||
</body> |
||||
HTML; |
||||
$dom = str_get_html($str); |
||||
assert($dom==$str); |
||||
assert($dom->find('body', 0)->outertext==$str); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<body> |
||||
<div> </a> </div> |
||||
</body> |
||||
HTML; |
||||
$dom = str_get_html($str); |
||||
|
||||
assert($dom->find('body', 0)->outertext==$str); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<table> |
||||
<tr> |
||||
<td><b>aa</b> |
||||
<tr> |
||||
<td><b>bb</b> |
||||
</table> |
||||
HTML; |
||||
$dom = str_get_html($str); |
||||
|
||||
assert($dom==$str); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<table> |
||||
<tr><td>1<td>2<td>3 |
||||
</table> |
||||
HTML; |
||||
$dom = str_get_html($str); |
||||
assert(count($dom->find('td'))==3); |
||||
assert($dom->find('td', 0)->innertext=='1'); |
||||
assert($dom->find('td', 0)->outertext=='<td>1'); |
||||
assert($dom->find('td', 1)->innertext=='2'); |
||||
assert($dom->find('td', 1)->outertext=='<td>2'); |
||||
assert($dom->find('td', 2)->innertext=="3\r\n"); |
||||
assert($dom->find('td', 2)->outertext=="<td>3\r\n"); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<table> |
||||
<tr> |
||||
<td><b>1</b></td> |
||||
<td><b>2</b></td> |
||||
<td><b>3</b></td> |
||||
</table> |
||||
HTML; |
||||
$dom = str_get_html($str); |
||||
assert(count($dom->find('tr td'))==3); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<table> |
||||
<tr><td><b>11</b></td><td><b>12</b></td><td><b>13</b></td> |
||||
<tr><td><b>21</b></td><td><b>32</b></td><td><b>43</b></td> |
||||
</table> |
||||
HTML; |
||||
$dom = str_get_html($str); |
||||
assert(count($dom->find('tr'))==2); |
||||
assert(count($dom->find('tr td'))==6); |
||||
assert($dom->find('tr', 1)->outertext=="<tr><td><b>21</b></td><td><b>32</b></td><td><b>43</b></td>\r\n"); |
||||
assert($dom->find('tr', 1)->innertext=="<td><b>21</b></td><td><b>32</b></td><td><b>43</b></td>\r\n"); |
||||
assert($dom->find('tr', 1)->plaintext=="213243\r\n"); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<p>1 |
||||
<p>2</p> |
||||
<p>3 |
||||
HTML; |
||||
$dom = str_get_html($str); |
||||
assert(count($dom->find('p'))==3); |
||||
assert($dom->find('p', 0)->innertext=="1\r\n"); |
||||
assert($dom->find('p', 0)->outertext=="<p>1\r\n"); |
||||
assert($dom->find('p', 1)->innertext=="2"); |
||||
assert($dom->find('p', 1)->outertext=="<p>2</p>"); |
||||
assert($dom->find('p', 2)->innertext=="3"); |
||||
assert($dom->find('p', 2)->outertext=="<p>3"); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<nobr>1 |
||||
<nobr>2</nobr> |
||||
<nobr>3 |
||||
HTML; |
||||
$dom = str_get_html($str); |
||||
assert(count($dom->find('nobr'))==3); |
||||
assert($dom->find('nobr', 0)->innertext=="1\r\n"); |
||||
assert($dom->find('nobr', 0)->outertext=="<nobr>1\r\n"); |
||||
assert($dom->find('nobr', 1)->innertext=="2"); |
||||
assert($dom->find('nobr', 1)->outertext=="<nobr>2</nobr>"); |
||||
assert($dom->find('nobr', 2)->innertext=="3"); |
||||
assert($dom->find('nobr', 2)->outertext=="<nobr>3"); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<dl><dt>1<dd>2<dt>3<dd>4</dl> |
||||
HTML; |
||||
$dom = str_get_html($str); |
||||
assert(count($dom->find('dt'))==2); |
||||
assert(count($dom->find('dd'))==2); |
||||
assert($dom->find('dt', 0)->innertext=="1"); |
||||
assert($dom->find('dt', 0)->outertext=="<dt>1"); |
||||
assert($dom->find('dt', 1)->innertext=="3"); |
||||
assert($dom->find('dt', 1)->outertext=="<dt>3"); |
||||
assert($dom->find('dd', 0)->innertext=="2"); |
||||
assert($dom->find('dd', 0)->outertext=="<dd>2"); |
||||
assert($dom->find('dd', 1)->innertext=="4"); |
||||
assert($dom->find('dd', 1)->outertext=="<dd>4"); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<dl id="dl1"><dt>11<dd>12<dt>13<dd>14</dl> |
||||
<dl id="dl2"><dt>21<dd>22<dt>23<dd>24</dl> |
||||
HTML; |
||||
$dom = str_get_html($str); |
||||
assert(count($dom->find('#dl1 dt'))==2); |
||||
assert(count($dom->find('#dl2 dd'))==2); |
||||
assert($dom->find('dl', 0)->innertext=="<dt>11<dd>12<dt>13<dd>14"); |
||||
assert($dom->find('dl', 1)->innertext=="<dt>21<dd>22<dt>23<dd>24"); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<ul id="ul1"><li><b>1</b><li><b>2</b></ul> |
||||
<ul id="ul2"><li><b>3</b><li><b>4</b></ul> |
||||
HTML; |
||||
$dom = str_get_html($str); |
||||
assert(count($dom->find('ul[id=ul1] li'))==2); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// invalid test |
||||
$str = <<<HTML |
||||
<div> |
||||
<div class="class0" id="id0" > |
||||
<img class="class0" id="id0" src="src0"> |
||||
</img> |
||||
<img class="class0" id="id0" src="src0"> |
||||
</div> |
||||
</div> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('img'))==2); |
||||
assert(count($dom->find('img'))==2); |
||||
assert($dom==$str); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<div> |
||||
<div class="class0" id="id0" > |
||||
<span></span> |
||||
</span> |
||||
<span></span> |
||||
</div> |
||||
</div> |
||||
HTML; |
||||
|
||||
$dom->load($str); |
||||
assert(count($dom->find('span'))==2); |
||||
assert(count($dom->find('div'))==2); |
||||
assert($dom==$str); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<div> |
||||
<div class="class0" id="id0" > |
||||
<span></span> |
||||
<span> |
||||
<span></span> |
||||
</div> |
||||
</div> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('span'))==3); |
||||
assert(count($dom->find('div'))==2); |
||||
assert($dom==$str); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<ul class="menublock"> |
||||
</li> |
||||
<ul> |
||||
<li> |
||||
<a href="http://www.cyberciti.biz/tips/pollsarchive">Polls Archive</a> |
||||
</li> |
||||
</ul> |
||||
</li> |
||||
</ul> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('ul'))==2); |
||||
assert(count($dom->find('ul ul'))==1); |
||||
assert(count($dom->find('li'))==1); |
||||
assert(count($dom->find('a'))==1); |
||||
assert($dom==$str); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<td> |
||||
<div> |
||||
</span> |
||||
</div> |
||||
</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('td'))==1); |
||||
assert(count($dom->find('div'))==1); |
||||
assert(count($dom->find('td div'))==1); |
||||
assert($dom==$str); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<td> |
||||
<div> |
||||
</b> |
||||
</div> |
||||
</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('td'))==1); |
||||
assert(count($dom->find('div'))==1); |
||||
assert(count($dom->find('td div'))==1); |
||||
assert($dom==$str); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<td> |
||||
<div></div> |
||||
</div> |
||||
</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('td'))==1); |
||||
assert(count($dom->find('div'))==1); |
||||
assert(count($dom->find('td div'))==1); |
||||
assert($dom==$str); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<html> |
||||
<body> |
||||
<table> |
||||
<tr> |
||||
foo</span> |
||||
<span>bar</span> |
||||
</span>important |
||||
</tr> |
||||
</table> |
||||
</bod> |
||||
</html> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('table span'))===1); |
||||
assert($dom->find('table span', 0)->innertext==='bar'); |
||||
assert($dom==$str); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<td> |
||||
<div> |
||||
<font> |
||||
<b>foo</b> |
||||
</div> |
||||
</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('td div font b'))==1); |
||||
assert($dom==$str); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<span style="okokok"> |
||||
... then slow into 287 |
||||
<i> |
||||
<b> |
||||
<font color="#0000CC">(hanover0...more volume between 202 & 53 |
||||
<i> |
||||
<b> |
||||
<font color="#0000CC">(parsippany)</font> |
||||
</b> |
||||
</i> |
||||
...then sluggish in spots out to dover chester road |
||||
<i> |
||||
<b> |
||||
<font color="#0000CC">(randolph)</font> |
||||
</b> |
||||
</i>..then traffic light delays out to route 46 |
||||
<i> |
||||
<b> |
||||
<font color="#0000CC">(roxbury)</font> |
||||
</b> |
||||
</i>/eb slow into 202 |
||||
<i> |
||||
<b> |
||||
<font color="#0000CC">(morris plains)</font> |
||||
</b> |
||||
</i> & again into 287 |
||||
<i> |
||||
<b> |
||||
<font color="#0000CC">(hanover)</font> |
||||
</b> |
||||
</i> |
||||
</span>. |
||||
<td class="d N4 c">52</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('span td'))==0); |
||||
assert($dom==$str); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// invalid '<' |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<td><b>test :</b>1 gram but <5 grams</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('td', 0)->innertext==='<b>test :</b>1 gram but <5 grams'); |
||||
assert($dom->find('td', 0)->plaintext==='test :1 gram but <5 grams'); |
||||
assert($dom==$str); |
||||
|
||||
$str = <<<HTML |
||||
<td><b>test :</b>1 gram but<5 grams</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('td', 0)->innertext==='<b>test :</b>1 gram but<5 grams'); |
||||
assert($dom->find('td', 0)->plaintext==='test :1 gram but<5 grams'); |
||||
assert($dom==$str); |
||||
|
||||
$str = <<<HTML |
||||
<td><b>test :</b>1 gram but< 5 grams</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('td', 0)->innertext==='<b>test :</b>1 gram but< 5 grams'); |
||||
assert($dom->find('td', 0)->plaintext==='test :1 gram but< 5 grams'); |
||||
assert($dom==$str); |
||||
|
||||
$str = <<<HTML |
||||
<td><b>test :</b>1 gram but < 5 grams</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('td', 0)->innertext==='<b>test :</b>1 gram but < 5 grams'); |
||||
assert($dom->find('td', 0)->plaintext==='test :1 gram but < 5 grams'); |
||||
assert($dom==$str); |
||||
|
||||
$str = <<<HTML |
||||
<td><b>test :</b>1 gram but 5< grams</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('td', 0)->innertext==='<b>test :</b>1 gram but 5< grams'); |
||||
assert($dom->find('td', 0)->plaintext==='test :1 gram but 5< grams'); |
||||
assert($dom==$str); |
||||
|
||||
$str = <<<HTML |
||||
<td><b>test :</b>1 gram but 5 < grams</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('td', 0)->innertext==='<b>test :</b>1 gram but 5 < grams'); |
||||
assert($dom->find('td', 0)->plaintext==='test :1 gram but 5 < grams'); |
||||
assert($dom==$str); |
||||
|
||||
$str = <<<HTML |
||||
<td><b>test :</b>1 gram but 5 <grams</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('td', 0)->innertext==='<b>test :</b>1 gram but 5 <grams'); |
||||
assert($dom->find('td', 0)->plaintext==='test :1 gram but 5 <grams'); |
||||
assert($dom==$str); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<td><b>test :</b>1 gram but 5< grams</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('td', 0)->innertext==='<b>test :</b>1 gram but 5< grams'); |
||||
assert($dom->find('td', 0)->plaintext==='test :1 gram but 5< grams'); |
||||
assert($dom==$str); |
||||
|
||||
$str = <<<HTML |
||||
<td><b>test :</b>1 gram but5< grams</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('td', 0)->innertext==='<b>test :</b>1 gram but5< grams'); |
||||
assert($dom->find('td', 0)->plaintext==='test :1 gram but5< grams'); |
||||
assert($dom==$str); |
||||
|
||||
$str = <<<HTML |
||||
<td><b>test :</b>1 gram but 5 <grams</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('td', 0)->innertext==='<b>test :</b>1 gram but 5 <grams'); |
||||
assert($dom->find('td', 0)->plaintext==='test :1 gram but 5 <grams'); |
||||
assert($dom==$str); |
||||
|
||||
$str = <<<HTML |
||||
<td><b>test :</b>1 gram but 5<grams</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('td', 0)->innertext==='<b>test :</b>1 gram but 5<grams'); |
||||
assert($dom->find('td', 0)->plaintext==='test :1 gram but 5<grams'); |
||||
assert($dom==$str); |
||||
|
||||
$str = <<<HTML |
||||
<td><b>test :</b>1 gram but 5 <grams</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('td', 0)->innertext==='<b>test :</b>1 gram but 5 <grams'); |
||||
assert($dom->find('td', 0)->plaintext==='test :1 gram but 5 <grams'); |
||||
assert($dom==$str); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// invalid '>' |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<td><b>test :</b>1 gram but >5 grams</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('td', 0)->innertext==='<b>test :</b>1 gram but >5 grams'); |
||||
assert($dom->find('td', 0)->plaintext==='test :1 gram but >5 grams'); |
||||
assert($dom==$str); |
||||
|
||||
$str = <<<HTML |
||||
<td><b>test :</b>1 gram but>5 grams</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('td', 0)->innertext==='<b>test :</b>1 gram but>5 grams'); |
||||
assert($dom->find('td', 0)->plaintext==='test :1 gram but>5 grams'); |
||||
assert($dom==$str); |
||||
|
||||
$str = <<<HTML |
||||
<td><b>test :</b>1 gram but> 5 grams</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('td', 0)->innertext==='<b>test :</b>1 gram but> 5 grams'); |
||||
assert($dom->find('td', 0)->plaintext==='test :1 gram but> 5 grams'); |
||||
assert($dom==$str); |
||||
|
||||
$str = <<<HTML |
||||
<td><b>test :</b>1 gram but > 5 grams</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('td', 0)->innertext==='<b>test :</b>1 gram but > 5 grams'); |
||||
assert($dom->find('td', 0)->plaintext==='test :1 gram but > 5 grams'); |
||||
assert($dom==$str); |
||||
|
||||
$str = <<<HTML |
||||
<td><b>test :</b>1 gram but 5> grams</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('td', 0)->innertext==='<b>test :</b>1 gram but 5> grams'); |
||||
assert($dom->find('td', 0)->plaintext==='test :1 gram but 5> grams'); |
||||
assert($dom==$str); |
||||
|
||||
$str = <<<HTML |
||||
<td><b>test :</b>1 gram but 5 > grams</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('td', 0)->innertext==='<b>test :</b>1 gram but 5 > grams'); |
||||
assert($dom->find('td', 0)->plaintext==='test :1 gram but 5 > grams'); |
||||
assert($dom==$str); |
||||
|
||||
$str = <<<HTML |
||||
<td><b>test :</b>1 gram but 5 >grams</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('td', 0)->innertext==='<b>test :</b>1 gram but 5 >grams'); |
||||
assert($dom->find('td', 0)->plaintext==='test :1 gram but 5 >grams'); |
||||
assert($dom==$str); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<td><b>test :</b>1 gram but 5> grams</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('td', 0)->innertext==='<b>test :</b>1 gram but 5> grams'); |
||||
assert($dom->find('td', 0)->plaintext==='test :1 gram but 5> grams'); |
||||
assert($dom==$str); |
||||
|
||||
$str = <<<HTML |
||||
<td><b>test :</b>1 gram but5> grams</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('td', 0)->innertext==='<b>test :</b>1 gram but5> grams'); |
||||
assert($dom->find('td', 0)->plaintext==='test :1 gram but5> grams'); |
||||
assert($dom==$str); |
||||
|
||||
$str = <<<HTML |
||||
<td><b>test :</b>1 gram but 5 >grams</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('td', 0)->innertext==='<b>test :</b>1 gram but 5 >grams'); |
||||
assert($dom->find('td', 0)->plaintext==='test :1 gram but 5 >grams'); |
||||
assert($dom==$str); |
||||
|
||||
$str = <<<HTML |
||||
<td><b>test :</b>1 gram but 5>grams</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('td', 0)->innertext==='<b>test :</b>1 gram but 5>grams'); |
||||
assert($dom->find('td', 0)->plaintext==='test :1 gram but 5>grams'); |
||||
assert($dom==$str); |
||||
|
||||
$str = <<<HTML |
||||
<td><b>test :</b>1 gram but 5 >grams</td> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('td', 0)->innertext==='<b>test :</b>1 gram but 5 >grams'); |
||||
assert($dom->find('td', 0)->plaintext==='test :1 gram but 5 >grams'); |
||||
assert($dom==$str); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// BAD HTML test |
||||
$str = <<<HTML |
||||
<strong class="see <a href="http://www.oeb.harvard.edu/faculty/girguis/">http://www.oeb.harvard.edu/faculty/girguis/</a>">.</strong></p> |
||||
HTML; |
||||
$dom->load($str); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<a href="http://www.oeb.harvard.edu/faculty/girguis\">http://www.oeb.harvard.edu/faculty/girguis/</a>"> |
||||
HTML; |
||||
$dom->load($str); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<strong class="''""";;''""";;\"\''''\"""''''""''>""'''"'" ' |
||||
HTML; |
||||
$dom->load($str); |
||||
// ----------------------------------------------------------------------------- |
||||
// tear down |
||||
$dom->clear(); |
||||
unset($dom); |
||||
?> |
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,68 @@ |
||||
<?php |
||||
// $Rev: 174 $ |
||||
error_reporting(E_ALL); |
||||
include_once('../simple_html_dom.php'); |
||||
|
||||
$dir = './html/'; |
||||
|
||||
$files = array( |
||||
array('name'=>'empty.htm', 'url'=>''), |
||||
array('name'=>'smarty_1.htm', 'url'=>'guestbook.tpl'), |
||||
array('name'=>'smarty_2.htm', 'url'=>'guestbook_form.tpl'), |
||||
|
||||
array('name'=>'google.htm', 'url'=>'http://www.google.com/'), |
||||
array('name'=>'senate.htm', 'url'=>'http://www.senate.gov/legislative/LIS/roll_call_lists/roll_call_vote_cfm.cfm?congress=101&session=2&vote=00317'), |
||||
array('name'=>'cyberciti.htm', 'url'=>'http://www.cyberciti.biz/tips/configure-ubuntu-grub-to-load-freebsd.html'), |
||||
array('name'=>'myspace.htm', 'url'=>'http://www.myspace.com/'), |
||||
array('name'=>'mootools.htm', 'url'=>'http://www.mootools.net/'), |
||||
array('name'=>'jquery.htm', 'url'=>'http://jquery.com/'), |
||||
array('name'=>'scriptaculo.htm', 'url'=>'http://script.aculo.us/'), |
||||
array('name'=>'apache.htm', 'url'=>'http://www.apache.org/'), |
||||
array('name'=>'microsoft.htm', 'url'=>'http://www.microsoft.com/'), |
||||
array('name'=>'slashdot.htm', 'url'=>'http://www.slashdot.org/'), |
||||
array('name'=>'ror.htm', 'url'=>'http://www.rubyonrails.org/'), |
||||
array('name'=>'yahoo.htm', 'url'=>'http://www.yahoo.com/'), |
||||
array('name'=>'phpbb.htm', 'url'=>'http://www.phpbb.com/'), |
||||
array('name'=>'python.htm', 'url'=>'http://www.python.org/'), |
||||
array('name'=>'lua.htm', 'url'=>'http://www.lua.org/'), |
||||
array('name'=>'php.htm', 'url'=>'http://www.php.net/'), |
||||
array('name'=>'ibm.htm', 'url'=>'http://www.ibm.com/'), |
||||
array('name'=>'java.htm', 'url'=>'http://java.sun.com/'), |
||||
array('name'=>'flickr.htm', 'url'=>'http://www.flickr.com/tour/upload/'), |
||||
array('name'=>'amazon.htm', 'url'=>'http://www.amazon.com/'), |
||||
array('name'=>'youtube.htm', 'url'=>'http://www.youtube.com/watch?v=kib05Ip6GSo&feature=bz302'), |
||||
); |
||||
|
||||
|
||||
echo 'memory: '.memory_get_usage().'<br>'; |
||||
$dom = new simple_html_dom; |
||||
|
||||
foreach($files as $f) { |
||||
// get file from url |
||||
if($f['url']!='') file_put_contents($dir.$f['name'], file_get_contents($f['url'])); |
||||
else file_put_contents($dir.$f['name'], ''); |
||||
|
||||
$start = microtime(); |
||||
$dom->load(file_get_contents($dir.$f['name']), false); |
||||
list($eu, $es) = explode(' ', microtime()); |
||||
list($bu, $bs) = explode(' ', $start); |
||||
echo sprintf('(%.1f)', ((float)$eu+(float)$es-(float)$bu-(float)$bs)*1000).'<br>'; |
||||
|
||||
if (file_get_contents($dir.$f['name'])!=$dom->save()) { |
||||
echo "[<font color='red'>failed</font>] ".$f['name']."<br>"; |
||||
$dom->save($dir.$f['name'].'.error'); |
||||
} |
||||
else |
||||
echo "[success] ".$f['name']."<br>"; |
||||
|
||||
echo 'memory: '.memory_get_usage().'<br>'; |
||||
|
||||
flush(); |
||||
set_time_limit(0); |
||||
} |
||||
|
||||
$dom->clear(); |
||||
unset($dom); |
||||
echo '<br>memory: '.memory_get_usage().'<br>'; |
||||
|
||||
?> |
||||
@ -0,0 +1,121 @@ |
||||
<?php |
||||
// $Rev: 179 $ |
||||
error_reporting(E_ALL); |
||||
include_once('../simple_html_dom.php'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
function dump_memory($init_size) { |
||||
$peak = number_format(memory_get_peak_usage()/1024, 0, '.', ','); |
||||
$curr = number_format(memory_get_usage()/1024, 0, '.', ','); |
||||
$diff = $curr - $init_size; |
||||
echo 'peak: ' . $peak . ' kb, end: ' . $curr . ' kb, add: ' . $diff . " kb<br>"; |
||||
} |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
$filename = './html/google.htm'; |
||||
//$filename = 'test.htm'; |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// test_load_file_memory |
||||
function test_load_file_memory($filename, $init_size) { |
||||
echo '[load file] init memory: '.number_format(memory_get_usage()/1024, 0, '.', ',').'<br>'; |
||||
echo '--------------------------------------------------------------------<br>'; |
||||
flush(); |
||||
for($i=0; $i<3; ++$i) { |
||||
$str = file_get_contents($filename); |
||||
|
||||
dump_memory($init_size); |
||||
unset($str); |
||||
} |
||||
echo 'after loop: '.number_format(memory_get_usage(), 0, '.', ',').'<br>'; |
||||
echo '--------------------------------------------------------------------<br>'; |
||||
flush(); |
||||
} |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// test_multi_objects_str_get_html |
||||
function test_multi_str_get_html($filename, $init_size) { |
||||
global $__g_node_mgr; |
||||
|
||||
$str = file_get_contents($filename); |
||||
echo '[str_get_html] init memory: '.number_format(memory_get_usage()/1024, 0, '.', ',').'<br>'; |
||||
echo '--------------------------------------------------------------------<br>'; |
||||
flush(); |
||||
for($i=0; $i<3; ++$i) { |
||||
$html = str_get_html($str); |
||||
dump_memory($init_size); |
||||
flush(); |
||||
} |
||||
echo 'after loop: '.number_format(memory_get_usage(), 0, '.', ',').'<br>'; |
||||
echo '--------------------------------------------------------------------<br>'; |
||||
flush(); |
||||
unset($str); |
||||
} |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// test_multi_file_get_html |
||||
function test_multi_file_get_html($filename, $init_size) { |
||||
echo '[file_get_html] init memory: '.number_format(memory_get_usage()/1024, 0, '.', ',').'<br>'; |
||||
echo '--------------------------------------------------------------------<br>'; |
||||
flush(); |
||||
for($i=0; $i<3; ++$i) { |
||||
$html = file_get_html($filename); |
||||
//$html->clear(); |
||||
unset($html); |
||||
dump_memory($init_size); |
||||
flush(); |
||||
} |
||||
echo 'after loop: '.number_format(memory_get_usage(), 0, '.', ',').'<br>'; |
||||
echo '--------------------------------------------------------------------<br>'; |
||||
flush(); |
||||
} |
||||
/* |
||||
// ----------------------------------------------------------------------------- |
||||
// test_multi_objects_clear_memory |
||||
function test_multi_objects_file_get_html_clear_memory($filename) { |
||||
echo '<br><br>[one object]<br>init memory: '.number_format(memory_get_usage(), 0, '.', ',').'<br>'; |
||||
echo '------------------------------------------<br>'; |
||||
flush(); |
||||
$html = new simple_html_dom; |
||||
for($i=0; $i<3; ++$i) { |
||||
$html->load_file($filename); |
||||
$html->clear(); |
||||
dump_memory(); |
||||
} |
||||
unset($dom); |
||||
echo 'final: '.number_format(memory_get_usage(), 0, '.', ',').'<br>'; |
||||
flush(); |
||||
|
||||
|
||||
echo '<br><br>[multi objects without clear memory]<br>init memory: '.number_format(memory_get_usage(), 0, '.', ',').'<br>'; |
||||
echo '------------------------------------------<br>'; |
||||
flush(); |
||||
for($i=0; $i<3; ++$i) { |
||||
$html = file_get_html($filename); |
||||
dump_memory(); |
||||
} |
||||
echo 'final: '.number_format(memory_get_usage(), 0, '.', ',').'<br>'; |
||||
flush(); |
||||
*/ |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// begin test |
||||
$init_size = number_format(memory_get_usage(), 0, '.', ','); |
||||
echo 'init ' . $init_size . " bytes<br>"; |
||||
flush(); |
||||
|
||||
echo '<br>before function: '.number_format(memory_get_usage()/1024, 0, '.', ',').'<br>'; |
||||
test_load_file_memory($filename, $init_size); |
||||
echo 'after function: '.number_format(memory_get_usage()/1024, 0, '.', ',').'<br><br>'; |
||||
flush(); |
||||
|
||||
echo '<br>before function: '.number_format(memory_get_usage()/1024, 0, '.', ',').'<br>'; |
||||
test_multi_file_get_html($filename, $init_size); |
||||
echo 'after function: '.number_format(memory_get_usage()/1024, 0, '.', ',').'<br><br>'; |
||||
flush(); |
||||
|
||||
echo '<br>before function: '.number_format(memory_get_usage()/1024, 0, '.', ',').'<br>'; |
||||
test_multi_file_get_html($filename, $init_size); |
||||
echo 'after function: '.number_format(memory_get_usage()/1024, 0, '.', ',').'<br><br>'; |
||||
flush(); |
||||
?> |
||||
@ -0,0 +1,60 @@ |
||||
<?php |
||||
// $Rev: 133 $ |
||||
// ----------------------------------------------------------------------------- |
||||
// setup |
||||
error_reporting(E_ALL); |
||||
require_once('../simple_html_dom.php'); |
||||
$dom = new simple_html_dom; |
||||
|
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// test problem of last emelemt not found |
||||
$str = <<<HTML |
||||
<img class="class0" id="id0" src="src0"> |
||||
<img class="class1" id="id1" src="src1"> |
||||
<img class="class2" id="id2" src="src2"> |
||||
HTML; |
||||
|
||||
$dom->load($str); |
||||
$es = $dom->find('img'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->src=='src0'); |
||||
assert($es[1]->src=='src1'); |
||||
assert($es[2]->src=='src2'); |
||||
assert($es[0]->innertext==''); |
||||
assert($es[1]->innertext==''); |
||||
assert($es[2]->innertext==''); |
||||
assert($es[0]->outertext=='<img class="class0" id="id0" src="src0">'); |
||||
assert($es[1]->outertext=='<img class="class1" id="id1" src="src1">'); |
||||
assert($es[2]->outertext=='<img class="class2" id="id2" src="src2">'); |
||||
assert($dom->find('img', 0)->src=='src0'); |
||||
assert($dom->find('img', 1)->src=='src1'); |
||||
assert($dom->find('img', 2)->src=='src2'); |
||||
assert($dom->find('img', 3)===null); |
||||
assert($dom->find('img', 99)===null); |
||||
assert($dom->save()==$str); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// test error tag |
||||
$str = <<<HTML |
||||
<img class="class0" id="id0" src="src0"><p>p1</p> |
||||
<img class="class1" id="id1" src="src1"><p> |
||||
<img class="class2" id="id2" src="src2"></a></div> |
||||
HTML; |
||||
|
||||
$dom = str_get_html($str); |
||||
$es = $dom->find('img'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->src=='src0'); |
||||
assert($es[1]->src=='src1'); |
||||
assert($es[2]->src=='src2'); |
||||
|
||||
$es = $dom->find('p'); |
||||
assert($es[0]->innertext=='p1'); |
||||
assert($dom==$str); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// tear down |
||||
$dom->clear(); |
||||
unset($dom); |
||||
?> |
||||
@ -0,0 +1,40 @@ |
||||
<?php |
||||
// $Rev: 133 $ |
||||
error_reporting(E_ALL); |
||||
|
||||
include_once('../simple_html_dom.php'); |
||||
|
||||
$all = 0; |
||||
$min = 10000; |
||||
$max = 0; |
||||
$count = 20; |
||||
|
||||
$str = file_get_contents('./html/google.htm'); |
||||
$html = new simple_html_dom; |
||||
|
||||
for ($i=0; $i<$count; ++$i) { |
||||
$start = microtime(); |
||||
|
||||
$html->load($str, false); |
||||
|
||||
list($eu, $es) = explode(' ', microtime()); |
||||
list($bu, $bs) = explode(' ', $start); |
||||
|
||||
$diff = ((float)$eu+(float)$es-(float)$bu-(float)$bs)*1000; |
||||
|
||||
if ($diff>$max) |
||||
$max = $diff; |
||||
|
||||
if ($diff<$min) |
||||
$min = $diff; |
||||
|
||||
$all += $diff; |
||||
echo sprintf('(%.1f)', $diff).'<br>'; |
||||
} |
||||
|
||||
echo '<br>-------------------------<br>'; |
||||
echo 'min: ' . $min . '<br>'; |
||||
echo 'max: ' . $max . '<br>'; |
||||
|
||||
echo '<br>avg: ' . $all/$count . '<br>'; |
||||
?> |
||||
@ -0,0 +1,12 @@ |
||||
<?php |
||||
// $Rev: 129 $ |
||||
error_reporting(E_ALL); |
||||
|
||||
foreach (new DirectoryIterator(getcwd()) as $entry) { |
||||
if ($entry->isFile() && strpos($entry, '_testcase.')>0) { |
||||
echo basename($entry); |
||||
require_once($entry); |
||||
echo '<br>...pass!<br><br>'; |
||||
} |
||||
} |
||||
?> |
||||
@ -0,0 +1,243 @@ |
||||
<?php |
||||
// $Rev: 130 $ |
||||
// ----------------------------------------------------------------------------- |
||||
// setup |
||||
error_reporting(E_ALL); |
||||
require_once('../../simple_html_dom_reader.php'); |
||||
$dom = new simple_html_dom; |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// attribute test |
||||
$str = <<<HTML |
||||
<div onclick="bar('aa')">foo</div> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('div', 0)==$str); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<div onclick='bar("aa")'>foo</div> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('div', 0)==$str); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// innertext test |
||||
$str = <<<HTML |
||||
<html><head></head><body><br><span>foo</span></body></html> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom==$str); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<html><head></head><body><br><span>bar</span></body></html> |
||||
HTML; |
||||
$dom->find('span', 0)->innertext = 'bar'; |
||||
assert($dom==$str); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<html><head>ok</head><body><br><span>bar</span></body></html> |
||||
HTML; |
||||
$dom->find('head', 0)->innertext = 'ok'; |
||||
assert($dom==$str); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// outertext test |
||||
$str = <<<HTML |
||||
<table> |
||||
<tr><th>Head1</th><th>Head2</th><th>Head3</th></tr> |
||||
<tr><td>1</td><td>2</td><td>3</td></tr> |
||||
</table> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('tr', 0)->outertext=='<tr><th>Head1</th><th>Head2</th><th>Head3</th></tr>'); |
||||
assert($dom->find('tr', 1)->outertext=='<tr><td>1</td><td>2</td><td>3</td></tr>'); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<table><tr><th>Head1</th><th>Head2</th><th>Head3</th><tr><td>1</td><td>2</td><td>3</td></table> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('tr', 0)->outertext=='<tr><th>Head1</th><th>Head2</th><th>Head3</th></tr>'); |
||||
assert($dom->find('tr', 1)->outertext=='<tr><td>1</td><td>2</td><td>3</td></tr>'); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<ul><li><b>li11</b></li><li><b>li12</b></li></ul><ul><li><b>li21</b></li><li><b>li22</b></li></ul> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('ul', 0)->outertext=='<ul><li><b>li11</b></li><li><b>li12</b></li></ul>'); |
||||
assert($dom->find('ul', 1)->outertext=='<ul><li><b>li21</b></li><li><b>li22</b></li></ul>'); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<ul><li><b>li11</b></li><li><b>li12</b></li><ul><li><b>li21</b></li><li><b>li22</b></li> |
||||
HTML; |
||||
//$dom->load($str); |
||||
//assert($dom->find('ul', 0)->outertext=='<ul><li><b>li11</b></li><li><b>li12</b></li></ul>'); |
||||
//assert($dom->find('ul', 1)->outertext=='<ul><li><b>li21</b></li><li><b>li22</b></li></ul>'); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<ul><li><b>li11</b><li><b>li12</b></li><ul><li><b>li21</b></li><li><b>li22</b> |
||||
HTML; |
||||
//$dom->load($str); |
||||
//assert($dom->find('ul', 0)->outertext=='<ul><li><b>li11</b><li><b>li12</b></li>'); |
||||
//assert($dom->find('ul', 1)->outertext=='<ul><li><b>li21</b></li><li><b>li22</b>'); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<table> |
||||
<tr><th>Head1</th><th>Head2</th><th>Head3</th></tr> |
||||
<tr><td>1</td><td>2</td><td>3</td></tr> |
||||
</table> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('tr', 0)->outertext=='<tr><th>Head1</th><th>Head2</th><th>Head3</th></tr>'); |
||||
assert($dom->find('tr', 1)->outertext=='<tr><td>1</td><td>2</td><td>3</td></tr>'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// replacement test |
||||
$str = <<<HTML |
||||
<div class="class1" id="id2" ><div class="class2">ok</div></div> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('div'); |
||||
assert(count($es)==2); |
||||
assert($es[0]->innertext=='<div class="class2">ok</div>'); |
||||
assert($es[0]->outertext=='<div class="class1" id="id2"><div class="class2">ok</div></div>'); |
||||
|
||||
// test isset |
||||
$es[0]->class = 'class_test'; |
||||
assert(isset($es[0]->class)===true); |
||||
assert(isset($es[0]->okok)===false); |
||||
|
||||
// test replacement |
||||
$es[0]->class = 'class_test'; |
||||
assert($es[0]->outertext=='<div class="class_test" id="id2"><div class="class2">ok</div></div>'); |
||||
|
||||
// test replacement |
||||
//$es[0]->tag = 'span'; |
||||
//assert($es[0]->outertext=='<span class="class_test" id="id2"><div class="class2">ok</div></span>'); |
||||
|
||||
// test unset (no more support...) |
||||
//$dom = str_get_dom($str); |
||||
//$es = $dom->find('div'); |
||||
//unset($es[0]->class); |
||||
//assert($es[0]->outertext=='<div id="id2" ><div class="class2">ok</div></div>'); |
||||
|
||||
//$dom->load($str); |
||||
//$es = $dom->find('div'); |
||||
//unset($es[0]->attr['class']); |
||||
//assert($es[0]->outertext=='<div id="id2"><div class="class2">ok</div></div>'); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<select name=something><options>blah</options><options>blah2</options></select> |
||||
HTML; |
||||
$dom->load($str); |
||||
$e = $dom->find('select[name=something]', 0); |
||||
$e->innertext = ''; |
||||
assert($e->outertext =='<select name="something"></select>'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// nested replacement test |
||||
$str = <<<HTML |
||||
<div class="class0" id="id0"><div class="class1">ok</div></div> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('div'); |
||||
assert(count($es)==2); |
||||
assert($es[0]->innertext=='<div class="class1">ok</div>'); |
||||
assert($es[0]->outertext=='<div class="class0" id="id0"><div class="class1">ok</div></div>'); |
||||
assert($es[1]->innertext=='ok'); |
||||
assert($es[1]->outertext=='<div class="class1">ok</div>'); |
||||
|
||||
// test replacement |
||||
$es[1]->innertext = 'okok'; |
||||
assert($es[1]->outertext=='<div class="class1">okok</div>'); |
||||
assert($es[0]->outertext=='<div class="class0" id="id0"><div class="class1">okok</div></div>'); |
||||
//assert($dom=='<div class="class0" id="id0"><div class="class1">okok</div></div>'); |
||||
|
||||
$es[1]->class = 'class_test'; |
||||
assert($es[1]->outertext=='<div class="class_test">okok</div>'); |
||||
assert($es[0]->outertext=='<div class="class0" id="id0"><div class="class_test">okok</div></div>'); |
||||
//assert($dom=='<div class="class0" id="id0"><div class="class_test">okok</div></div>'); |
||||
|
||||
$es[0]->class = 'class_test'; |
||||
assert($es[0]->outertext=='<div class="class_test" id="id0"><div class="class_test">okok</div></div>'); |
||||
//assert($dom=='<div class="class_test" id="id0"><div class="class_test">okok</div></div>'); |
||||
|
||||
$es[0]->innertext = 'okokok'; |
||||
assert($es[0]->outertext=='<div class="class_test" id="id0">okokok</div>'); |
||||
//assert($dom=='<div class="class_test" id="id0">okokok</div>'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// <p> test |
||||
$str = <<<HTML |
||||
<div class="class0"><p>ok0<a href="#">link0</a></p><div class="class1"><p>ok1<a href="#">link1</a></p></div><div class="class2"></div><p>ok2<a href="#">link2</a></p></div> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('p'); |
||||
assert($es[0]->innertext=='ok0<a href="#">link0</a>'); |
||||
assert($es[1]->innertext=='ok1<a href="#">link1</a>'); |
||||
assert($es[2]->innertext=='ok2<a href="#">link2</a>'); |
||||
assert($dom->find('p', 0)->plaintext=='ok0link0'); |
||||
assert($dom->find('p', 1)->plaintext=='ok1link1'); |
||||
assert($dom->find('p', 2)->plaintext=='ok2link2'); |
||||
|
||||
$count = 0; |
||||
foreach($dom->find('p') as $p) { |
||||
$a = $p->find('a'); |
||||
assert($a[0]->innertext=='link'.$count); |
||||
++$count; |
||||
} |
||||
|
||||
$es = $dom->find('p a'); |
||||
assert($es[0]->innertext=='link0'); |
||||
assert($es[1]->innertext=='link1'); |
||||
assert($es[2]->innertext=='link2'); |
||||
assert($dom->find('p a', 0)->plaintext=='link0'); |
||||
assert($dom->find('p a', 1)->plaintext=='link1'); |
||||
assert($dom->find('p a', 2)->plaintext=='link2'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// <embed> test |
||||
$str = <<<HTML |
||||
<EMBED SRC="../graphics/sounds/1812over.mid" HEIGHT="60" WIDTH="144"></EMBED> |
||||
HTML; |
||||
$dom->load($str); |
||||
$e = $dom->find('embed', 0); |
||||
assert($e->src=='../graphics/sounds/1812over.mid'); |
||||
assert($e->height=='60'); |
||||
assert($e->width=='144'); |
||||
assert($e==strtolower($str)); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// <pre> test |
||||
$str = <<<HTML |
||||
<div class="class0" id="id0" > |
||||
<pre> |
||||
<input type=submit name="btnG" value="go" onclick='goto("url0")'> |
||||
</pre> |
||||
</div> |
||||
HTML; |
||||
$dom->load($str); |
||||
//assert(count($dom->find('input'))==0); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// <code> test |
||||
$str = <<<HTML |
||||
<div class="class0" id="id0" > |
||||
<CODE> |
||||
<input type=submit name="btnG" value="go" onclick='goto("url0")'> |
||||
</CODE> |
||||
</div> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('code'))==1); |
||||
//assert(count($dom->find('input'))==0); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// tear down |
||||
$dom->clear(); |
||||
unset($dom); |
||||
?> |
||||
@ -0,0 +1,103 @@ |
||||
<?php |
||||
// $Rev: 130 $ |
||||
// ----------------------------------------------------------------------------- |
||||
error_reporting(E_ALL); |
||||
|
||||
include_once('../../simple_html_dom_reader.php'); |
||||
|
||||
$filename = '../html/google.htm'; |
||||
|
||||
function dump_memory() { |
||||
echo 'peak: ' . number_format(memory_get_peak_usage(), 0, '.', ',') . ' bytes, end: ' . number_format(memory_get_usage(), 0, '.', ',') . " bytes<br>"; |
||||
} |
||||
|
||||
function stat_dom($dom) { |
||||
$count_text = 0; |
||||
$count_comm = 0; |
||||
$count_elem = 0; |
||||
$count_tag_end = 0; |
||||
|
||||
foreach($dom->nodes as $n) { |
||||
if ($n->nodetype==HDOM_TYPE_TEXT) |
||||
++$count_text; |
||||
if ($n->nodetype==HDOM_TYPE_COMMENT) |
||||
++$count_comm; |
||||
if ($n->nodetype==HDOM_TYPE_ELEMENT) |
||||
++$count_elem; |
||||
if ($n->nodetype==HDOM_TYPE_ENDTAG) |
||||
++$count_tag_end; |
||||
} |
||||
|
||||
echo 'Total: '. count($dom->nodes).', Text: '.$count_text.', Commnet: '.$count_comm.', Tag: '.$count_elem.', End Tag: '.$count_tag_end.'<br>'; |
||||
} |
||||
|
||||
echo 'init ' . number_format(memory_get_usage(), 0, '.', ',') . " bytes"; |
||||
|
||||
|
||||
echo '<br><br>[load file]<br>init memory: '.number_format(memory_get_usage(), 0, '.', ',').'<br>'; |
||||
echo '------------------------------------------<br>'; |
||||
flush(); |
||||
for($i=0; $i<3; ++$i) { |
||||
$str = file_get_contents($filename); |
||||
unset($str); |
||||
dump_memory(); |
||||
} |
||||
echo 'final: '.number_format(memory_get_usage(), 0, '.', ',').'<br>'; |
||||
flush(); |
||||
|
||||
|
||||
$str = file_get_contents($filename); |
||||
echo '<br><br>[multi objects str_get_dom clear memory]<br>init memory: '.number_format(memory_get_usage(), 0, '.', ',').'<br>'; |
||||
echo '------------------------------------------<br>'; |
||||
flush(); |
||||
for($i=0; $i<3; ++$i) { |
||||
$dom = str_get_dom($str); |
||||
//stat_dom($dom); |
||||
$dom->clear(); |
||||
unset($dom); |
||||
dump_memory(); |
||||
flush(); |
||||
} |
||||
echo 'final: '.number_format(memory_get_usage(), 0, '.', ',').'<br>'; |
||||
flush(); |
||||
|
||||
echo '<br><br>[multi objects file_get_dom clear memory]<br>init memory: '.number_format(memory_get_usage(), 0, '.', ',').'<br>'; |
||||
echo '------------------------------------------<br>'; |
||||
flush(); |
||||
for($i=0; $i<3; ++$i) { |
||||
$dom = file_get_dom($filename); |
||||
//stat_dom($dom); |
||||
$dom->clear(); |
||||
unset($dom); |
||||
dump_memory(); |
||||
flush(); |
||||
} |
||||
echo 'final: '.number_format(memory_get_usage(), 0, '.', ',').'<br>'; |
||||
flush(); |
||||
|
||||
|
||||
echo '<br><br>[one object]<br>init memory: '.number_format(memory_get_usage(), 0, '.', ',').'<br>'; |
||||
echo '------------------------------------------<br>'; |
||||
flush(); |
||||
$dom = new simple_html_dom; |
||||
for($i=0; $i<3; ++$i) { |
||||
$dom->load_file($filename); |
||||
$dom->clear(); |
||||
dump_memory(); |
||||
} |
||||
unset($dom); |
||||
echo 'final: '.number_format(memory_get_usage(), 0, '.', ',').'<br>'; |
||||
flush(); |
||||
|
||||
|
||||
|
||||
echo '<br><br>[multi objects without clear memory]<br>init memory: '.number_format(memory_get_usage(), 0, '.', ',').'<br>'; |
||||
echo '------------------------------------------<br>'; |
||||
flush(); |
||||
for($i=0; $i<3; ++$i) { |
||||
$dom = file_get_dom($filename); |
||||
dump_memory(); |
||||
} |
||||
echo 'final: '.number_format(memory_get_usage(), 0, '.', ',').'<br>'; |
||||
flush(); |
||||
?> |
||||
@ -0,0 +1,38 @@ |
||||
<?php |
||||
// $Rev: 130 $ |
||||
// ----------------------------------------------------------------------------- |
||||
error_reporting(E_ALL); |
||||
|
||||
include_once('../../simple_html_dom_reader.php'); |
||||
|
||||
$all = 0; |
||||
$min = 10000; |
||||
$max = 0; |
||||
$count = 20; |
||||
|
||||
$str = file_get_contents('../html/google.htm'); |
||||
$dom = new simple_html_dom; |
||||
|
||||
for ($i=0; $i<$count; ++$i) { |
||||
$start = microtime(); |
||||
$dom->load($str, false); |
||||
list($eu, $es) = explode(' ', microtime()); |
||||
list($bu, $bs) = explode(' ', $start); |
||||
|
||||
if (((float)$eu+(float)$es-(float)$bu-(float)$bs)*1000 > $max) |
||||
$max = ((float)$eu+(float)$es-(float)$bu-(float)$bs)*1000; |
||||
|
||||
if (((float)$eu+(float)$es-(float)$bu-(float)$bs)*1000 < $min) |
||||
$min = ((float)$eu+(float)$es-(float)$bu-(float)$bs)*1000; |
||||
|
||||
$all += ((float)$eu+(float)$es-(float)$bu-(float)$bs)*1000; |
||||
echo sprintf('(%.1f)', ((float)$eu+(float)$es-(float)$bu-(float)$bs)*1000).'<br>'; |
||||
$dom->clear(); |
||||
} |
||||
|
||||
echo '<br>-------------------------<br>'; |
||||
echo 'min: ' . $min . '<br>'; |
||||
echo 'max: ' . $max . '<br>'; |
||||
|
||||
echo '<br>avg: ' . $all/$count . '<br>'; |
||||
?> |
||||
@ -0,0 +1,584 @@ |
||||
<?php |
||||
// $Rev: 130 $ |
||||
// ----------------------------------------------------------------------------- |
||||
// setup |
||||
error_reporting(E_ALL); |
||||
require_once('../../simple_html_dom_reader.php'); |
||||
$dom = new simple_html_dom; |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// "\t" or "\n" in tag test |
||||
// std selector test 1 |
||||
$str = <<<HTML |
||||
<img |
||||
class="class0" id="id0" src="src0"> |
||||
<img |
||||
class="class1" id="id1" src="src1"> |
||||
<img class="class2" id="id2" src="src2"> |
||||
HTML; |
||||
$dom->load($str); |
||||
$e = $dom->find('img'); |
||||
assert(count($e)==3); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// std selector test |
||||
$str = <<<HTML |
||||
<img class="class0" id="id0" src="src0"> |
||||
<img class="class1" id="id1" src="src1"> |
||||
<img class="class2" id="id2" src="src2"> |
||||
HTML; |
||||
$dom->load($str); |
||||
|
||||
// ----------------------------------------------- |
||||
// all |
||||
//$e = $dom->find('*'); |
||||
//assert(count($e)==3); |
||||
|
||||
// ----------------------------------------------- |
||||
// tag |
||||
assert(count($dom->find('img'))==3); |
||||
|
||||
// ----------------------------------------------- |
||||
// class |
||||
$es = $dom->find('img.class0'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->src=='src0'); |
||||
assert($es[0]->innertext==''); |
||||
assert($es[0]->outertext=='<img class="class0" id="id0" src="src0">'); |
||||
|
||||
$es = $dom->find('.class0'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->src=='src0'); |
||||
assert($es[0]->innertext==''); |
||||
assert($es[0]->outertext=='<img class="class0" id="id0" src="src0">'); |
||||
|
||||
// ----------------------------------------------- |
||||
// id |
||||
$es = $dom->find('img#id1'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->src=='src1'); |
||||
assert($es[0]->innertext==''); |
||||
assert($es[0]->outertext=='<img class="class1" id="id1" src="src1">'); |
||||
|
||||
$es = $dom->find('#id2'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->src=='src2'); |
||||
assert($es[0]->innertext==''); |
||||
assert($es[0]->outertext=='<img class="class2" id="id2" src="src2">'); |
||||
|
||||
// ----------------------------------------------- |
||||
// attr |
||||
$es = $dom->find('img[src="src0"]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->src=='src0'); |
||||
assert($es[0]->innertext==''); |
||||
assert($es[0]->outertext=='<img class="class0" id="id0" src="src0">'); |
||||
|
||||
$es = $dom->find('img[src=src0]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->src=='src0'); |
||||
assert($es[0]->innertext==''); |
||||
assert($es[0]->outertext=='<img class="class0" id="id0" src="src0">'); |
||||
|
||||
$es = $dom->find('[src=src0]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->src=='src0'); |
||||
assert($es[0]->innertext==''); |
||||
assert($es[0]->outertext=='<img class="class0" id="id0" src="src0">'); |
||||
|
||||
$es = $dom->find('[src="src0"]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->src=='src0'); |
||||
assert($es[0]->innertext==''); |
||||
assert($es[0]->outertext=='<img class="class0" id="id0" src="src0">'); |
||||
|
||||
// ----------------------------------------------- |
||||
// text |
||||
$str = <<<HTML |
||||
<b>text1</b><b>text2</b> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('text'); |
||||
assert(count($es)==2); |
||||
assert($es[0]->innertext=='text1'); |
||||
assert($es[0]->outertext=='text1'); |
||||
assert($es[0]->plaintext=='text1'); |
||||
assert($es[1]->innertext=='text2'); |
||||
assert($es[1]->outertext=='text2'); |
||||
assert($es[1]->plaintext=='text2'); |
||||
|
||||
$str = <<<HTML |
||||
<b>text1</b><b>text2</b> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('b text'); |
||||
assert(count($es)==2); |
||||
assert($es[0]->innertext=='text1'); |
||||
assert($es[0]->outertext=='text1'); |
||||
assert($es[0]->plaintext=='text1'); |
||||
assert($es[1]->innertext=='text2'); |
||||
assert($es[1]->outertext=='text2'); |
||||
assert($es[1]->plaintext=='text2'); |
||||
|
||||
|
||||
// ----------------------------------------------- |
||||
// xml namespace test |
||||
$str = <<<HTML |
||||
<bw:bizy id="date">text</bw:bizy> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('bw:bizy'); |
||||
assert(count($es)==0); |
||||
|
||||
// ----------------------------------------------- |
||||
// user defined tag name test |
||||
$str = <<<HTML |
||||
<div_test id="1">text</div_test> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('div_test'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->id=='1'); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<div-test id="1">text</div-test> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('div-test'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->id=='1'); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<div::test id="1">text</div::test> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('div::test'); |
||||
assert(count($es)==0); |
||||
|
||||
// ----------------------------------------------- |
||||
// find all occurrences of id="1" regardless of the tag |
||||
$str = <<<HTML |
||||
<img class="class0" id="1" src="src0"> |
||||
<img class="class1" id="2" src="src1"> |
||||
<div class="class2" id="1">ok</div> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('[id=1]'); |
||||
assert(count($es)==2); |
||||
assert($es[0]->tag=='img'); |
||||
assert($es[1]->tag=='div'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// multiple selector test |
||||
$str = <<<HTML |
||||
<div class="class0" id="id0" > |
||||
<div class="class1" id="id1"> |
||||
<div class="class2" id="id2">ok</div> |
||||
</div> |
||||
</div> |
||||
HTML; |
||||
$dom->load($str); |
||||
|
||||
$es = $dom->find('div'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->id=='id0'); |
||||
assert($es[1]->id=='id1'); |
||||
assert($es[2]->id=='id2'); |
||||
|
||||
$es = $dom->find('div div'); |
||||
assert(count($es)==2); |
||||
assert($es[0]->id=='id1'); |
||||
assert($es[1]->id=='id2'); |
||||
|
||||
$es = $dom->find('div div div'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->id=='id2'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// multiple selector test 2 |
||||
$str = <<<HTML |
||||
<table> |
||||
<tr> |
||||
<td>0</td> |
||||
<td>1</td> |
||||
</tr> |
||||
</table> |
||||
<table> |
||||
<tr> |
||||
<td>2</td> |
||||
<td>3</td> |
||||
</tr> |
||||
</table> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('table td'); |
||||
assert(count($es)==4); |
||||
assert($es[0]->innertext=='0'); |
||||
assert($es[1]->innertext=='1'); |
||||
assert($es[2]->innertext=='2'); |
||||
assert($es[3]->innertext=='3'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// multiple selector test 3 |
||||
$str = <<<HTML |
||||
<table> |
||||
<tr> |
||||
<td> |
||||
<table class="hello"> |
||||
<tr> |
||||
<td>0</td> |
||||
<td>1</td> |
||||
</tr> |
||||
</table> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
<table class="hello"> |
||||
<tr> |
||||
<td>2</td> |
||||
<td>3</td> |
||||
</tr> |
||||
</table> |
||||
HTML; |
||||
$dom = str_get_dom($str); |
||||
$es = $dom->find('table.hello td'); |
||||
assert(count($es)==4); |
||||
assert($es[0]->innertext=='0'); |
||||
assert($es[1]->innertext=='1'); |
||||
assert($es[2]->innertext=='2'); |
||||
assert($es[3]->innertext=='3'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// nested selector test |
||||
$str = <<<HTML |
||||
<ul> |
||||
<li>0</li> |
||||
<li>1</li> |
||||
</ul> |
||||
<ul> |
||||
<li>2</li> |
||||
<li>3</li> |
||||
</ul> |
||||
HTML; |
||||
$dom = str_get_dom($str); |
||||
$es= $dom->find('ul'); |
||||
assert(count($es)==2); |
||||
|
||||
foreach($es as $n) { |
||||
$li = $n->find('li'); |
||||
assert(count($li)==2); |
||||
} |
||||
|
||||
$es= $dom->find('li'); |
||||
assert(count($es)==4); |
||||
assert($es[0]->innertext=='0'); |
||||
assert($es[1]->innertext=='1'); |
||||
assert($es[2]->innertext=='2'); |
||||
assert($es[3]->innertext=='3'); |
||||
assert($es[0]->outertext=='<li>0</li>'); |
||||
assert($es[1]->outertext=='<li>1</li>'); |
||||
assert($es[2]->outertext=='<li>2</li>'); |
||||
assert($es[3]->outertext=='<li>3</li>'); |
||||
|
||||
$counter = 0; |
||||
foreach($dom->find('ul') as $ul) { |
||||
foreach($ul->find('li') as $li) { |
||||
assert($li->innertext=="$counter"); |
||||
assert($li->outertext=="<li>$counter</li>"); |
||||
++$counter; |
||||
} |
||||
} |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// [attribute=value] selector |
||||
$str = <<<HTML |
||||
<input type="radio" name="newsletter" value="Hot Fuzz" /> |
||||
<input type="radio" name="newsletters" value="Cold Fusion" /> |
||||
<input type="radio" name="accept" value="Evil Plans" /> |
||||
HTML; |
||||
$dom->load($str); |
||||
|
||||
$es = $dom->find('[name=newsletter]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->name=='newsletter'); |
||||
assert($es[0]->value=='Hot Fuzz'); |
||||
assert($es[0]->outertext=='<input type="radio" name="newsletter" value="Hot Fuzz">'); |
||||
|
||||
$es = $dom->find('[name="newsletter"]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->name=='newsletter'); |
||||
assert($es[0]->value=='Hot Fuzz'); |
||||
assert($es[0]->outertext=='<input type="radio" name="newsletter" value="Hot Fuzz">'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// [attribute!=value] selector |
||||
$str = <<<HTML |
||||
<input type="radio" name="newsletter" value="Hot Fuzz" /> |
||||
<input type="radio" name="newsletter" value="Cold Fusion" /> |
||||
<input type="radio" name="accept" value="Evil Plans" /> |
||||
HTML; |
||||
$dom->load($str); |
||||
|
||||
$es = $dom->find('[name!=newsletter]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->name=='accept'); |
||||
assert($es[0]->value=='Evil Plans'); |
||||
assert($es[0]->outertext=='<input type="radio" name="accept" value="Evil Plans">'); |
||||
|
||||
$es = $dom->find('[name!="newsletter"]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->name=='accept'); |
||||
assert($es[0]->value=='Evil Plans'); |
||||
assert($es[0]->outertext=='<input type="radio" name="accept" value="Evil Plans">'); |
||||
|
||||
$es = $dom->find("[name!='newsletter']"); |
||||
assert(count($es)==1); |
||||
assert($es[0]->name=='accept'); |
||||
assert($es[0]->value=='Evil Plans'); |
||||
assert($es[0]->outertext=='<input type="radio" name="accept" value="Evil Plans">'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// [attribute^=value] selector |
||||
$str = <<<HTML |
||||
<input name="newsletter" /> |
||||
<input name="milkman" /> |
||||
<input name="newsboy" /> |
||||
HTML; |
||||
$dom->load($str); |
||||
|
||||
$es = $dom->find('[name^=news]'); |
||||
assert(count($es)==2); |
||||
assert($es[0]->name=='newsletter'); |
||||
assert($es[0]->outertext=='<input name="newsletter">'); |
||||
assert($es[1]->name=='newsboy'); |
||||
assert($es[1]->outertext=='<input name="newsboy">'); |
||||
|
||||
$es = $dom->find('[name^="news"]'); |
||||
assert(count($es)==2); |
||||
assert($es[0]->name=='newsletter'); |
||||
assert($es[0]->outertext=='<input name="newsletter">'); |
||||
assert($es[1]->name=='newsboy'); |
||||
assert($es[1]->outertext=='<input name="newsboy">'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// [attribute$=value] selector |
||||
$str = <<<HTML |
||||
<input name="newsletter" /> |
||||
<input name="milkman" /> |
||||
<input name="jobletter" /> |
||||
HTML; |
||||
$dom->load($str); |
||||
|
||||
$es = $dom->find('[name$=letter]'); |
||||
assert(count($es)==2); |
||||
assert($es[0]->name=='newsletter'); |
||||
assert($es[0]->outertext=='<input name="newsletter">'); |
||||
assert($es[1]->name=='jobletter'); |
||||
assert($es[1]->outertext=='<input name="jobletter">'); |
||||
|
||||
$es = $dom->find('[name$="letter"]'); |
||||
assert(count($es)==2); |
||||
assert($es[0]->name=='newsletter'); |
||||
assert($es[0]->outertext=='<input name="newsletter">'); |
||||
assert($es[1]->name=='jobletter'); |
||||
assert($es[1]->outertext=='<input name="jobletter">'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// [attribute*=value] selector |
||||
$str = <<<HTML |
||||
<input name="man-news" /> |
||||
<input name="milkman" /> |
||||
<input name="letterman2" /> |
||||
<input name="newmilk" /> |
||||
<div class="foo hello bar"></div> |
||||
<div class="foo bar hello"></div> |
||||
<div class="hello foo bar"></div> |
||||
HTML; |
||||
$dom->load($str); |
||||
|
||||
$es = $dom->find('[name*=man]'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->name=='man-news'); |
||||
assert($es[0]->outertext=='<input name="man-news">'); |
||||
assert($es[1]->name=='milkman'); |
||||
assert($es[1]->outertext=='<input name="milkman">'); |
||||
assert($es[2]->name=='letterman2'); |
||||
assert($es[2]->outertext=='<input name="letterman2">'); |
||||
|
||||
$es = $dom->find('[name*="man"]'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->name=='man-news'); |
||||
assert($es[0]->outertext=='<input name="man-news">'); |
||||
assert($es[1]->name=='milkman'); |
||||
assert($es[1]->outertext=='<input name="milkman">'); |
||||
assert($es[2]->name=='letterman2'); |
||||
assert($es[2]->outertext=='<input name="letterman2">'); |
||||
|
||||
$es = $dom->find('[class*=hello]'); |
||||
assert($es[0]->outertext=='<div class="foo hello bar"></div>'); |
||||
assert($es[1]->outertext=='<div class="foo bar hello"></div>'); |
||||
assert($es[2]->outertext=='<div class="hello foo bar"></div>'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// Testcase for '[]' names element |
||||
// normal checkbox |
||||
$str = <<<HTML |
||||
<input type="checkbox" name="news" value="foo" /> |
||||
<input type="checkbox" name="news" value="bar"> |
||||
<input type="checkbox" name="news" value="baz" /> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('[name=news]'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->name=='news'); |
||||
assert($es[0]->value=='foo'); |
||||
assert($es[1]->name=='news'); |
||||
assert($es[1]->value=='bar'); |
||||
assert($es[2]->name=='news'); |
||||
assert($es[2]->value=='baz'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// with '[]' names checkbox |
||||
$str = <<<HTML |
||||
<input type="checkbox" name="news[]" value="foo" /> |
||||
<input type="checkbox" name="news[]" value="bar"> |
||||
<input type="checkbox" name="news[]" value="baz" /> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('[name=news[]]'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->name=='news[]'); |
||||
assert($es[0]->value=='foo'); |
||||
assert($es[1]->name=='news[]'); |
||||
assert($es[1]->value=='bar'); |
||||
assert($es[2]->name=='news[]'); |
||||
assert($es[2]->value=='baz'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// with '[]' names checkbox 2 |
||||
$str = <<<HTML |
||||
<input type="checkbox" name="news[foo]" value="foo" /> |
||||
<input type="checkbox" name="news[bar]" value="bar"> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('[name=news[foo]]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->name=='news[foo]'); |
||||
assert($es[0]->value=='foo'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// regular expression syntax escaping |
||||
$str = <<<HTML |
||||
<div> |
||||
<a href="image/one.png">one</a> |
||||
<a href="image/two.jpg">two</a> |
||||
<a href="/favorites/aaa">three (text)</a> |
||||
</div> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('a[href^="image/"]'))==2); |
||||
assert(count($dom->find('a[href*="/favorites/"]'))==1); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// multiple class test |
||||
$str = <<<HTML |
||||
<div class="hello">should verify</div> |
||||
<div class="foo hello bar">should verify</div> |
||||
<div class="foo bar hello">should verify</div> |
||||
<div class="hello foo bar">should verify</div> |
||||
<div class="helloworld">should not verify</div> |
||||
<div class="worldhello">should not verify</div> |
||||
<div class="worldhelloworld">should not verify</div> |
||||
HTML; |
||||
|
||||
$dom->load($str); |
||||
$es = $dom->find('[class="hello"],[class*="hello "],[class*=" hello"]'); |
||||
assert(count($es)==4); |
||||
assert($es[0]->class=='hello'); |
||||
assert($es[1]->class=='foo hello bar'); |
||||
assert($es[2]->class=='foo bar hello'); |
||||
assert($es[3]->class=='hello foo bar'); |
||||
|
||||
$es = $dom->find('.hello'); |
||||
assert(count($es)==4); |
||||
assert($es[0]->class=='hello'); |
||||
assert($es[1]->class=='foo hello bar'); |
||||
assert($es[2]->class=='foo bar hello'); |
||||
assert($es[3]->class=='hello foo bar'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// multiple class test 2 |
||||
$str = <<<HTML |
||||
<div class="aa bb"></div> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('[class=aa]'))==1); |
||||
assert(count($dom->find('[class=bb]'))==1); |
||||
assert(count($dom->find('[class="aa bb"]'))==1); |
||||
assert(count($dom->find('[class=aa], [class=bb]'))==1); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// multiple selector test |
||||
$str = <<<HTML |
||||
<p>aaa</p> |
||||
<b>bbb</b> |
||||
<i>ccc</i> |
||||
HTML; |
||||
$dom->load($str); |
||||
|
||||
$es = $dom->find('p,b,i'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->tag=='p'); |
||||
assert($es[1]->tag=='b'); |
||||
assert($es[2]->tag=='i'); |
||||
|
||||
$es = $dom->find('p, b, i'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->tag=='p'); |
||||
assert($es[1]->tag=='b'); |
||||
assert($es[2]->tag=='i'); |
||||
|
||||
$es = $dom->find('p, b , i'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->tag=='p'); |
||||
assert($es[1]->tag=='b'); |
||||
assert($es[2]->tag=='i'); |
||||
|
||||
$es = $dom->find('p ,b ,i'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->tag=='p'); |
||||
assert($es[1]->tag=='b'); |
||||
assert($es[2]->tag=='i'); |
||||
|
||||
$es = $dom->find('b,p,i'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->tag=='p'); |
||||
assert($es[1]->tag=='b'); |
||||
assert($es[2]->tag=='i'); |
||||
|
||||
$es = $dom->find('i,b,p'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->tag=='p'); |
||||
assert($es[1]->tag=='b'); |
||||
assert($es[2]->tag=='i'); |
||||
|
||||
$es = $dom->find('p,b,i,p,b'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->tag=='p'); |
||||
assert($es[1]->tag=='b'); |
||||
assert($es[2]->tag=='i'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// multiple selector test 2 |
||||
$str = <<<HTML |
||||
<img title="aa" src="src"> |
||||
<a href="href" title="aa"></a> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('a[title], img[title]'))==2); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// tear down |
||||
$dom->clear(); |
||||
unset($dom); |
||||
?> |
||||
@ -0,0 +1,742 @@ |
||||
<?php |
||||
// $Rev: 172 $ |
||||
// ----------------------------------------------------------------------------- |
||||
// setup |
||||
error_reporting(E_ALL); |
||||
require_once('../simple_html_dom.php'); |
||||
$dom = new simple_html_dom; |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// "\t" or "\n" in tag test |
||||
$str = <<<HTML |
||||
<img |
||||
class="class0" id="id0" src="src0"> |
||||
<img |
||||
class="class1" id="id1" src="src1"> |
||||
<img class="class2" id="id2" src="src2"> |
||||
HTML; |
||||
$dom->load($str); |
||||
$e = $dom->find('img'); |
||||
assert(count($e)==3); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// std selector test |
||||
$str = <<<HTML |
||||
<div> |
||||
<img class="class0" id="id0" src="src0"> |
||||
<img class="class1" id="id1" src="src1"> |
||||
<img class="class2" id="id2" src="src2"> |
||||
</div> |
||||
HTML; |
||||
$dom->load($str); |
||||
|
||||
// ----------------------------------------------- |
||||
// wildcard |
||||
assert(count($dom->find('*'))==1); |
||||
assert(count($dom->find('div *'))==3); |
||||
assert(count($dom->find('div img *'))==0); |
||||
|
||||
|
||||
assert(count($dom->find(' * '))==1); |
||||
assert(count($dom->find(' div * '))==3); |
||||
assert(count($dom->find(' div img *'))==0); |
||||
|
||||
// ----------------------------------------------- |
||||
// tag |
||||
assert(count($dom->find('img'))==3); |
||||
assert(count($dom->find('text'))==4); |
||||
|
||||
// ----------------------------------------------- |
||||
// class |
||||
$es = $dom->find('img.class0'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->src=='src0'); |
||||
assert($es[0]->innertext==''); |
||||
assert($es[0]->outertext=='<img class="class0" id="id0" src="src0">'); |
||||
|
||||
$es = $dom->find('.class0'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->src=='src0'); |
||||
assert($es[0]->innertext==''); |
||||
assert($es[0]->outertext=='<img class="class0" id="id0" src="src0">'); |
||||
|
||||
// ----------------------------------------------- |
||||
// index |
||||
assert($dom->find('img', 0)->src=='src0'); |
||||
assert($dom->find('img', 1)->src=='src1'); |
||||
assert($dom->find('img', 2)->src=='src2'); |
||||
assert($dom->find('img', -3)->src=='src0'); |
||||
assert($dom->find('img', -2)->src=='src1'); |
||||
assert($dom->find('img', -1)->src=='src2'); |
||||
|
||||
// ----------------------------------------------- |
||||
// id |
||||
$es = $dom->find('img#id1'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->src=='src1'); |
||||
assert($es[0]->innertext==''); |
||||
assert($es[0]->outertext=='<img class="class1" id="id1" src="src1">'); |
||||
|
||||
$es = $dom->find('#id2'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->src=='src2'); |
||||
assert($es[0]->innertext==''); |
||||
assert($es[0]->outertext=='<img class="class2" id="id2" src="src2">'); |
||||
|
||||
// ----------------------------------------------- |
||||
// attr |
||||
$es = $dom->find('img[src="src0"]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->src=='src0'); |
||||
assert($es[0]->innertext==''); |
||||
assert($es[0]->outertext=='<img class="class0" id="id0" src="src0">'); |
||||
|
||||
$es = $dom->find('img[src=src0]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->src=='src0'); |
||||
assert($es[0]->innertext==''); |
||||
assert($es[0]->outertext=='<img class="class0" id="id0" src="src0">'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// wildcard |
||||
$es = $dom->find('*[src]'); |
||||
assert(count($es)==3); |
||||
|
||||
$es = $dom->find('*[src=*]'); |
||||
assert(count($es)==3); |
||||
|
||||
$es = $dom->find('*[alt=*]'); |
||||
assert(count($es)==0); |
||||
|
||||
$es = $dom->find('*[src="src0"]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->src=='src0'); |
||||
assert($es[0]->innertext==''); |
||||
assert($es[0]->outertext=='<img class="class0" id="id0" src="src0">'); |
||||
|
||||
$es = $dom->find('*[src=src0]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->src=='src0'); |
||||
assert($es[0]->innertext==''); |
||||
assert($es[0]->outertext=='<img class="class0" id="id0" src="src0">'); |
||||
|
||||
$es = $dom->find('[src=src0]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->src=='src0'); |
||||
assert($es[0]->innertext==''); |
||||
assert($es[0]->outertext=='<img class="class0" id="id0" src="src0">'); |
||||
|
||||
$es = $dom->find('[src="src0"]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->src=='src0'); |
||||
assert($es[0]->innertext==''); |
||||
assert($es[0]->outertext=='<img class="class0" id="id0" src="src0">'); |
||||
|
||||
$es = $dom->find('*#id1'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->src=='src1'); |
||||
assert($es[0]->innertext==''); |
||||
assert($es[0]->outertext=='<img class="class1" id="id1" src="src1">'); |
||||
|
||||
$es = $dom->find('*.class0'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->src=='src0'); |
||||
assert($es[0]->innertext==''); |
||||
assert($es[0]->outertext=='<img class="class0" id="id0" src="src0">'); |
||||
|
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// text |
||||
$str = <<<HTML |
||||
<b>text1</b><b>text2</b> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('text'); |
||||
assert(count($es)==2); |
||||
assert($es[0]->innertext=='text1'); |
||||
assert($es[0]->outertext=='text1'); |
||||
assert($es[0]->plaintext=='text1'); |
||||
assert($es[1]->innertext=='text2'); |
||||
assert($es[1]->outertext=='text2'); |
||||
assert($es[1]->plaintext=='text2'); |
||||
|
||||
$str = <<<HTML |
||||
<b>text1</b><b>text2</b> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('b text'); |
||||
assert(count($es)==2); |
||||
assert($es[0]->innertext=='text1'); |
||||
assert($es[0]->outertext=='text1'); |
||||
assert($es[0]->plaintext=='text1'); |
||||
assert($es[1]->innertext=='text2'); |
||||
assert($es[1]->outertext=='text2'); |
||||
assert($es[1]->plaintext=='text2'); |
||||
|
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// xml namespace test |
||||
$str = <<<HTML |
||||
<bw:bizy id="date">text</bw:bizy> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('bw:bizy'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->id=='date'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// user defined tag name test |
||||
$str = <<<HTML |
||||
<div_test id="1">text</div_test> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('div_test'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->id=='1'); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<div-test id="1">text</div-test> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('div-test'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->id=='1'); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<div::test id="1">text</div::test> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('div::test'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->id=='1'); |
||||
|
||||
// ----------------------------------------------- |
||||
// find all occurrences of id="1" regardless of the tag |
||||
$str = <<<HTML |
||||
<img class="class0" id="1" src="src0"> |
||||
<img class="class1" id="2" src="src1"> |
||||
<div class="class2" id="1">ok</div> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('[id=1]'); |
||||
assert(count($es)==2); |
||||
assert($es[0]->tag=='img'); |
||||
assert($es[1]->tag=='div'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// multiple selector test |
||||
$str = <<<HTML |
||||
<div class="class0" id="id0" ><div class="class1" id="id1"><div class="class2" id="id2">ok</div><div style="st1 st2" id="id3"><span class="id4">ok</span></div></div></div> |
||||
HTML; |
||||
$dom->load($str); |
||||
|
||||
$es = $dom->find('div'); |
||||
assert(count($es)==4); |
||||
assert($es[0]->id=='id0'); |
||||
assert($es[1]->id=='id1'); |
||||
assert($es[2]->id=='id2'); |
||||
|
||||
$es = $dom->find('div div'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->id=='id1'); |
||||
assert($es[1]->id=='id2'); |
||||
|
||||
$es = $dom->find('div div div'); |
||||
assert(count($es)==2); |
||||
assert($es[0]->id=='id2'); |
||||
|
||||
$es = $dom->find('.class0 .class1 .class2'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->id=='id2'); |
||||
|
||||
$es = $dom->find('#id0 #id1 #id2'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->id=='id2'); |
||||
|
||||
$es = $dom->find('div[id=id0] div[id=id1] div[id=id2]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->id=='id2'); |
||||
|
||||
$es = $dom->find('div[id="id0"] div[id="id1"] div[id="id2"]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->id=='id2'); |
||||
|
||||
$es = $dom->find('div[id=id0] div[id="id1"] div[id="id2"]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->id=='id2'); |
||||
|
||||
$es = $dom->find('div[id="id0"] div[id=id1] div[id="id2"]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->id=='id2'); |
||||
|
||||
$es = $dom->find('div[id="id0"] div[id="id1"] div[id=id2]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->id=='id2'); |
||||
|
||||
$es = $dom->find("div[id='id0'] div[id='id1'] div[id='id2']"); |
||||
assert(count($es)==1); |
||||
assert($es[0]->id=='id2'); |
||||
|
||||
$es = $dom->find('[id=id0] [id=id1] [id=id2]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->id=='id2'); |
||||
|
||||
$es = $dom->find('[id] [id] [id]'); |
||||
assert(count($es)==2); |
||||
assert($es[0]->id=='id2'); |
||||
assert($es[1]->id=='id3'); |
||||
|
||||
$es = $dom->find('[id=id0] [id=id1] [id=id3]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->id=='id3'); |
||||
|
||||
$es = $dom->find('[id=id0] [id=id1] [style="st1 st2"]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->id=='id3'); |
||||
|
||||
$es = $dom->find('[id=id0] [id=id1] [style=st1 st2]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->id=='id3'); |
||||
|
||||
$es = $dom->find('[id=id0] [id=id1] [style=st1 st2] span[class=id4]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->innertext=='ok'); |
||||
|
||||
$es = $dom->find('[id=id0] [id=id1] [style="st1 st2"] span[class="id4"]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->innertext=='ok'); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<table> |
||||
<tr> |
||||
<td>0</td> |
||||
<td>1</td> |
||||
</tr> |
||||
</table> |
||||
<table> |
||||
<tr> |
||||
<td>2</td> |
||||
<td>3</td> |
||||
</tr> |
||||
</table> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('table td'); |
||||
assert(count($es)==4); |
||||
assert($es[0]->innertext=='0'); |
||||
assert($es[1]->innertext=='1'); |
||||
assert($es[2]->innertext=='2'); |
||||
assert($es[3]->innertext=='3'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// multiple selector test 3 |
||||
$str = <<<HTML |
||||
<table> |
||||
<tr> |
||||
<td> |
||||
<table class="hello"> |
||||
<tr> |
||||
<td>0</td> |
||||
<td>1</td> |
||||
</tr> |
||||
</table> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
<table class="hello"> |
||||
<tr> |
||||
<td>2</td> |
||||
<td>3</td> |
||||
</tr> |
||||
</table> |
||||
HTML; |
||||
$dom = str_get_html($str); |
||||
$es = $dom->find('table.hello td'); |
||||
assert(count($es)==4); |
||||
assert($es[0]->innertext=='0'); |
||||
assert($es[1]->innertext=='1'); |
||||
assert($es[2]->innertext=='2'); |
||||
assert($es[3]->innertext=='3'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// nested selector test |
||||
$str = <<<HTML |
||||
<ul> |
||||
<li>0</li> |
||||
<li>1</li> |
||||
</ul> |
||||
<ul> |
||||
<li>2</li> |
||||
<li>3</li> |
||||
</ul> |
||||
HTML; |
||||
$dom = str_get_html($str); |
||||
$es= $dom->find('ul'); |
||||
assert(count($es)==2); |
||||
foreach($es as $n) { |
||||
$li = $n->find('li'); |
||||
assert(count($li)==2); |
||||
} |
||||
|
||||
$es= $dom->find('li'); |
||||
assert(count($es)==4); |
||||
assert($es[0]->innertext=='0'); |
||||
assert($es[1]->innertext=='1'); |
||||
assert($es[2]->innertext=='2'); |
||||
assert($es[3]->innertext=='3'); |
||||
assert($es[0]->outertext=='<li>0</li>'); |
||||
assert($es[1]->outertext=='<li>1</li>'); |
||||
assert($es[2]->outertext=='<li>2</li>'); |
||||
assert($es[3]->outertext=='<li>3</li>'); |
||||
|
||||
$counter = 0; |
||||
foreach($dom->find('ul') as $ul) { |
||||
foreach($ul->find('li') as $li) { |
||||
assert($li->innertext=="$counter"); |
||||
assert($li->outertext=="<li>$counter</li>"); |
||||
++$counter; |
||||
} |
||||
} |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// [attribute=value] selector |
||||
$str = <<<HTML |
||||
<input type="radio" name="newsletter" value="Hot Fuzz" /> |
||||
<input type="radio" name="newsletters" value="Cold Fusion" /> |
||||
<input type="radio" name="accept" value="Evil Plans" /> |
||||
HTML; |
||||
$dom->load($str); |
||||
|
||||
$es = $dom->find('[name=newsletter]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->name=='newsletter'); |
||||
assert($es[0]->value=='Hot Fuzz'); |
||||
assert($es[0]->outertext=='<input type="radio" name="newsletter" value="Hot Fuzz" />'); |
||||
|
||||
$es = $dom->find('[name="newsletter"]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->name=='newsletter'); |
||||
assert($es[0]->value=='Hot Fuzz'); |
||||
assert($es[0]->outertext=='<input type="radio" name="newsletter" value="Hot Fuzz" />'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// [attribute!=value] selector |
||||
$str = <<<HTML |
||||
<input type="radio" name="newsletter" value="Hot Fuzz" /> |
||||
<input type="radio" name="newsletter" value="Cold Fusion" /> |
||||
<input type="radio" name="accept" value="Evil Plans" /> |
||||
HTML; |
||||
$dom->load($str); |
||||
|
||||
$es = $dom->find('[name!=newsletter]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->name=='accept'); |
||||
assert($es[0]->value=='Evil Plans'); |
||||
assert($es[0]->outertext=='<input type="radio" name="accept" value="Evil Plans" />'); |
||||
|
||||
$es = $dom->find('[name!="newsletter"]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->name=='accept'); |
||||
assert($es[0]->value=='Evil Plans'); |
||||
assert($es[0]->outertext=='<input type="radio" name="accept" value="Evil Plans" />'); |
||||
|
||||
$es = $dom->find("[name!='newsletter']"); |
||||
assert(count($es)==1); |
||||
assert($es[0]->name=='accept'); |
||||
assert($es[0]->value=='Evil Plans'); |
||||
assert($es[0]->outertext=='<input type="radio" name="accept" value="Evil Plans" />'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// [attribute^=value] selector |
||||
$str = <<<HTML |
||||
<input name="newsletter" /> |
||||
<input name="milkman" /> |
||||
<input name="newsboy" /> |
||||
HTML; |
||||
$dom->load($str); |
||||
|
||||
$es = $dom->find('[name^=news]'); |
||||
assert(count($es)==2); |
||||
assert($es[0]->name=='newsletter'); |
||||
assert($es[0]->outertext=='<input name="newsletter" />'); |
||||
assert($es[1]->name=='newsboy'); |
||||
assert($es[1]->outertext=='<input name="newsboy" />'); |
||||
|
||||
$es = $dom->find('[name^="news"]'); |
||||
assert(count($es)==2); |
||||
assert($es[0]->name=='newsletter'); |
||||
assert($es[0]->outertext=='<input name="newsletter" />'); |
||||
assert($es[1]->name=='newsboy'); |
||||
assert($es[1]->outertext=='<input name="newsboy" />'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// [attribute$=value] selector |
||||
$str = <<<HTML |
||||
<input name="newsletter" /> |
||||
<input name="milkman" /> |
||||
<input name="jobletter" /> |
||||
HTML; |
||||
$dom->load($str); |
||||
|
||||
$es = $dom->find('[name$=letter]'); |
||||
assert(count($es)==2); |
||||
assert($es[0]->name=='newsletter'); |
||||
assert($es[0]->outertext=='<input name="newsletter" />'); |
||||
assert($es[1]->name=='jobletter'); |
||||
assert($es[1]->outertext=='<input name="jobletter" />'); |
||||
|
||||
$es = $dom->find('[name$="letter"]'); |
||||
assert(count($es)==2); |
||||
assert($es[0]->name=='newsletter'); |
||||
assert($es[0]->outertext=='<input name="newsletter" />'); |
||||
assert($es[1]->name=='jobletter'); |
||||
assert($es[1]->outertext=='<input name="jobletter" />'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// [attribute*=value] selector |
||||
$str = <<<HTML |
||||
<input name="man-news" /> |
||||
<input name="milkman" /> |
||||
<input name="letterman2" /> |
||||
<input name="newmilk" /> |
||||
<div class="foo hello bar"></div> |
||||
<div class="foo bar hello"></div> |
||||
<div class="hello foo bar"></div> |
||||
HTML; |
||||
$dom->load($str); |
||||
|
||||
$es = $dom->find('[name*=man]'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->name=='man-news'); |
||||
assert($es[0]->outertext=='<input name="man-news" />'); |
||||
assert($es[1]->name=='milkman'); |
||||
assert($es[1]->outertext=='<input name="milkman" />'); |
||||
assert($es[2]->name=='letterman2'); |
||||
assert($es[2]->outertext=='<input name="letterman2" />'); |
||||
|
||||
$es = $dom->find('[name*="man"]'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->name=='man-news'); |
||||
assert($es[0]->outertext=='<input name="man-news" />'); |
||||
assert($es[1]->name=='milkman'); |
||||
assert($es[1]->outertext=='<input name="milkman" />'); |
||||
assert($es[2]->name=='letterman2'); |
||||
assert($es[2]->outertext=='<input name="letterman2" />'); |
||||
|
||||
$es = $dom->find('[class*=hello]'); |
||||
assert($es[0]->outertext=='<div class="foo hello bar"></div>'); |
||||
assert($es[1]->outertext=='<div class="foo bar hello"></div>'); |
||||
assert($es[2]->outertext=='<div class="hello foo bar"></div>'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// Testcase for '[]' names element |
||||
// normal checkbox |
||||
$str = <<<HTML |
||||
<input type="checkbox" name="news" value="foo" /> |
||||
<input type="checkbox" name="news" value="bar"> |
||||
<input type="checkbox" name="news" value="baz" /> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('[name=news]'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->name=='news'); |
||||
assert($es[0]->value=='foo'); |
||||
assert($es[1]->name=='news'); |
||||
assert($es[1]->value=='bar'); |
||||
assert($es[2]->name=='news'); |
||||
assert($es[2]->value=='baz'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// with '[]' names checkbox |
||||
$str = <<<HTML |
||||
<input type="checkbox" name="news[]" value="foo" /> |
||||
<input type="checkbox" name="news[]" value="bar"> |
||||
<input type="checkbox" name="news[]" value="baz" /> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('[name=news[]]'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->name=='news[]'); |
||||
assert($es[0]->value=='foo'); |
||||
assert($es[1]->name=='news[]'); |
||||
assert($es[1]->value=='bar'); |
||||
assert($es[2]->name=='news[]'); |
||||
assert($es[2]->value=='baz'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// with '[]' names checkbox 2 |
||||
$str = <<<HTML |
||||
<input type="checkbox" name="news[foo]" value="foo" /> |
||||
<input type="checkbox" name="news[bar]" value="bar"> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('[name=news[foo]]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->name=='news[foo]'); |
||||
assert($es[0]->value=='foo'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// with '[]' names 3 |
||||
$str = <<<HTML |
||||
<div name="div[]"> |
||||
<input type="checkbox" name="checkbox[]" value="foo" /> |
||||
</div> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('div[name=div[]] input[name=checkbox[]]'); |
||||
assert(count($es)==1); |
||||
assert($es[0]->value=='foo'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// regular expression |
||||
$str = <<<HTML |
||||
<div> |
||||
<a href="image/one.png">one</a> |
||||
<a href="image/two.jpg">two</a> |
||||
<a href="/favorites/aaa">three (text)</a> |
||||
</div> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('a[href^="image/"]'))==2); |
||||
assert(count($dom->find('a[href*="/favorites/"]'))==1); |
||||
|
||||
$str = <<<HTML |
||||
<html> |
||||
<body> |
||||
<div id="news-id-123">okok</div> |
||||
</bod> |
||||
</html> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('div[id*=news-id-[0-9]+]'))==1); |
||||
assert(count($dom->find('div[id*=/news-id-[0-9]+/i]'))==1); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// multiple class test |
||||
$str = <<<HTML |
||||
<div class="hello">should verify</div> |
||||
<div class="foo hello bar">should verify</div> |
||||
<div class="foo bar hello">should verify</div> |
||||
<div class="hello foo bar">should verify</div> |
||||
<div class="helloworld">should not verify</div> |
||||
<div class="worldhello">should not verify</div> |
||||
<div class="worldhelloworld">should not verify</div> |
||||
HTML; |
||||
|
||||
$dom->load($str); |
||||
$es = $dom->find('[class="hello"],[class*="hello "],[class*=" hello"]'); |
||||
assert(count($es)==4); |
||||
assert($es[0]->class=='hello'); |
||||
assert($es[1]->class=='foo hello bar'); |
||||
assert($es[2]->class=='foo bar hello'); |
||||
assert($es[3]->class=='hello foo bar'); |
||||
|
||||
$es = $dom->find('.hello'); |
||||
assert(count($es)==4); |
||||
assert($es[0]->class=='hello'); |
||||
assert($es[1]->class=='foo hello bar'); |
||||
assert($es[2]->class=='foo bar hello'); |
||||
assert($es[3]->class=='hello foo bar'); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<div class="aa bb"></div> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('[class=aa]'))==1); |
||||
assert(count($dom->find('[class=bb]'))==1); |
||||
assert(count($dom->find('[class="aa bb"]'))==1); |
||||
assert(count($dom->find('[class=aa], [class=bb]'))==1); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// multiple selector test |
||||
$str = <<<HTML |
||||
<p>aaa</p> |
||||
<b>bbb</b> |
||||
<i>ccc</i> |
||||
HTML; |
||||
$dom->load($str); |
||||
|
||||
$es = $dom->find('p,b,i'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->tag=='p'); |
||||
assert($es[1]->tag=='b'); |
||||
assert($es[2]->tag=='i'); |
||||
|
||||
$es = $dom->find('p, b, i'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->tag=='p'); |
||||
assert($es[1]->tag=='b'); |
||||
assert($es[2]->tag=='i'); |
||||
|
||||
$es = $dom->find('p, b , i'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->tag=='p'); |
||||
assert($es[1]->tag=='b'); |
||||
assert($es[2]->tag=='i'); |
||||
|
||||
$es = $dom->find('p ,b ,i'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->tag=='p'); |
||||
assert($es[1]->tag=='b'); |
||||
assert($es[2]->tag=='i'); |
||||
|
||||
$es = $dom->find('b,p,i'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->tag=='p'); |
||||
assert($es[1]->tag=='b'); |
||||
assert($es[2]->tag=='i'); |
||||
|
||||
$es = $dom->find('i,b,p'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->tag=='p'); |
||||
assert($es[1]->tag=='b'); |
||||
assert($es[2]->tag=='i'); |
||||
|
||||
$es = $dom->find('p,b,i,p,b'); |
||||
assert(count($es)==3); |
||||
assert($es[0]->tag=='p'); |
||||
assert($es[1]->tag=='b'); |
||||
assert($es[2]->tag=='i'); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<img title="aa" src="src"> |
||||
<a href="href" title="aa"></a> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('a[title], img[title]'))==2); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// elements that do NOT have the specified attribute |
||||
$str = <<<HTML |
||||
<img id="aa" src="src"> |
||||
<img src="src"> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('img[!id]'))==1); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
//js test |
||||
$str = <<<HTML |
||||
<a onMouseover="dropdownmenu(this, event, 'messagesmenu')" class="n" href="messagecenter.cfm?key=972489434">foo</a> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('a[onMouseover="dropdownmenu(this, event, \'messagesmenu\')"]',0)->innertext=='foo'); |
||||
assert($dom->find("a[onMouseover=dropdownmenu(this, event, 'messagesmenu')]",0)->innertext=='foo'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
//dash test |
||||
$str = '<meta http-equiv="content-type" content="text/html; charset=utf-8" />'; |
||||
|
||||
$dom->load($str); |
||||
assert($dom->find('meta[http-equiv=content-type]', 0)->content==='text/html; charset=utf-8'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// tear down |
||||
$dom->clear(); |
||||
unset($dom); |
||||
?> |
||||
@ -0,0 +1,27 @@ |
||||
<?php |
||||
// $Rev: 133 $ |
||||
error_reporting(E_ALL); |
||||
include_once('../simple_html_dom.php'); |
||||
|
||||
$start = microtime(); |
||||
list($bu, $bs) = explode(' ', $start); |
||||
$html = file_get_html('slickspeed.htm'); |
||||
list($eu, $es) = explode(' ', microtime()); |
||||
echo sprintf('parse (%.1f)', ((float)$eu+(float)$es-(float)$bu-(float)$bs)*1000).'<br><br>'; |
||||
|
||||
assert(count($html->find('#title'))==1); |
||||
assert(count($html->find('div'))==51); |
||||
assert(count($html->find('div[class]'))==51); |
||||
assert(count($html->find('div.example'))==43); |
||||
assert(count($html->find('div[class=example]'))==43); |
||||
assert(count($html->find('.note'))==14); |
||||
|
||||
assert(count($html->find('div[class^=exa]'))==43); |
||||
assert(count($html->find('div[class$=mple]'))==43); |
||||
assert(count($html->find('div[class*=e]'))==50); |
||||
assert(count($html->find('div[class!=made_up]'))==51); |
||||
|
||||
assert(count($html->find('p'))==324); |
||||
|
||||
echo 'All pass!<br>'; |
||||
?> |
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,243 @@ |
||||
<?php |
||||
// $Rev: 115 $ |
||||
// ----------------------------------------------------------------------------- |
||||
// setup |
||||
error_reporting(E_ALL); |
||||
require_once('../simple_html_dom.php'); |
||||
$dom = new simple_html_dom; |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// empty test |
||||
$str = ''; |
||||
$dom->load($str); |
||||
assert($dom->save()==$str); |
||||
// ----------------------------------------------- |
||||
$str = null; |
||||
$dom->load($str); |
||||
assert($dom->save()==$str); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// text test |
||||
$str = <<<HTML |
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" |
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"></html> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('unknown'))==1); |
||||
assert(count($dom->find('text'))==1); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// string quote test |
||||
$str = <<<HTML |
||||
<div class="class0" id="id0" > |
||||
okok<br> |
||||
<input type=submit name="btnG" value="go" onclick='goto("url0")'> |
||||
<br/> |
||||
<div><input type=submit name="btnG2" value="go" onclick="goto('url1'+'\'')"/></div> |
||||
<input type=submit name="btnG2" value="go" onclick="goto('url2')"/> |
||||
<div><input type=submit name="btnG2" value="go" onclick='goto("url4"+"\"")'></div> |
||||
<br/> |
||||
</div> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('input'); |
||||
assert(count($es)==4); |
||||
assert($es[0]->onclick=='goto("url0")'); |
||||
assert($es[1]->onclick=="goto('url1'+'\'')"); |
||||
assert($es[2]->onclick=="goto('url2')"); |
||||
assert($es[3]->onclick=='goto("url4"+"\"")'); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// clone test |
||||
$str = <<<HTML |
||||
<div class="class0" id="id0" > |
||||
okok<br> |
||||
<input type=submit name="btnG" value="go" onclick='goto("url0")'> |
||||
<br/> |
||||
<div><input type=submit name="btnG2" value="go" onclick="goto('url1'+'\'')"/></div> |
||||
<input type=submit name="btnG2" value="go" onclick="goto('url2')"/> |
||||
<div><input type=submit name="btnG2" value="go" onclick='goto("url4"+"\"")'></div> |
||||
<br/> |
||||
</div> |
||||
HTML; |
||||
$dom->load($str); |
||||
$es = $dom->find('input'); |
||||
assert(count($es)==4); |
||||
assert($es[0]->onclick=='goto("url0")'); |
||||
assert($es[1]->onclick=="goto('url1'+'\'')"); |
||||
assert($es[2]->onclick=="goto('url2')"); |
||||
assert($es[3]->onclick=='goto("url4"+"\"")'); |
||||
|
||||
unset($es); |
||||
$dom2 = clone($dom); |
||||
$es = $dom2->find('input'); |
||||
assert(count($es)==4); |
||||
assert($es[0]->onclick=='goto("url0")'); |
||||
assert($es[1]->onclick=="goto('url1'+'\'')"); |
||||
assert($es[2]->onclick=="goto('url2')"); |
||||
assert($es[3]->onclick=='goto("url4"+"\"")'); |
||||
|
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<div class='class0' id="id0" aa='aa' bb="bb" cc='"cc"' dd="'dd'"></div> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom==$str); |
||||
assert($dom->save()==$str); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// monkey test |
||||
$str = <<<HTML |
||||
< |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom==$str); |
||||
assert($dom->save()==$str); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
< |
||||
|
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom==$str); |
||||
assert($dom->save()==$str); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
|
||||
|
||||
< |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom==$str); |
||||
assert($dom->save()==$str); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<a |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom==$str); |
||||
assert($dom->save()==$str); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<a< |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom==$str); |
||||
assert($dom->save()==$str); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<<<<ab |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom==$str); |
||||
assert($dom->save()==$str); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<<<<ab |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom==$str); |
||||
assert($dom->save()==$str); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<<><<>ab |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom==$str); |
||||
assert($dom->save()==$str); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<abc |
||||
|
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom==$str); |
||||
assert($dom->save()==$str); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom==$str); |
||||
assert($dom->save()==$str); |
||||
// ----------------------------------------------- |
||||
// $str = <<<HTML |
||||
// <abc |
||||
// (<1 mol%) |
||||
// HTML; |
||||
// $dom->load($str); |
||||
// echo $dom; |
||||
// assert($dom==$str); |
||||
// assert($dom->save()==$str); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
(<1 mol%) |
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom==$str); |
||||
assert($dom->save()==$str); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// rnadom string test |
||||
function str_random($length) |
||||
{ |
||||
$str = ""; |
||||
srand((double)microtime()*1000000); |
||||
$char_list = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; |
||||
$char_list .= "abcdefghijklmnopqrstuvwxyz"; |
||||
$char_list .= "1234567890"; |
||||
$char_list .= "<>!?[]%^&*()"; |
||||
for($i=0; $i<$length; ++$i) |
||||
$str .= substr($char_list,(rand()%(strlen($char_list))), 1); |
||||
return $str; |
||||
} |
||||
|
||||
for($i=0; $i<60; ++$i) { |
||||
$str = str_random($i); |
||||
//echo $str."\n<br>"; |
||||
$dom->load($str, false); |
||||
//echo $dom->save()."\n<br>"; |
||||
assert($dom==$str); |
||||
} |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// lowercase test |
||||
$str = <<<HTML |
||||
<img class="class0" id="id0" src="src0"> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('img'))==1); |
||||
assert(count($dom->find('IMG'))==1); |
||||
assert(isset($dom->find('img', 0)->class)); |
||||
assert(!isset($dom->find('img', 0)->CLASS)); |
||||
assert($dom->find('img', 0)->class=='class0'); |
||||
assert($dom==$str); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<IMG CLASS="class0" ID="id0" SRC="src0"> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('img'))==1); |
||||
assert(count($dom->find('IMG'))==1); |
||||
assert(isset($dom->find('img', 0)->class)); |
||||
assert(!isset($dom->find('img', 0)->CLASS)); |
||||
assert($dom->find('img', 0)->class=='class0'); |
||||
assert($dom==strtolower($str)); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<IMG CLASS="class0" ID="id0" SRC="src0"> |
||||
HTML; |
||||
$dom->load($str, false); |
||||
assert(count($dom->find('img'))==0); |
||||
assert(count($dom->find('IMG'))==1); |
||||
assert(isset($dom->find('IMG', 0)->CLASS)); |
||||
assert(!isset($dom->find('IMG', 0)->class)); |
||||
assert($dom->find('IMG', 0)->CLASS=='class0'); |
||||
assert($dom==$str); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// tear down |
||||
$dom->clear(); |
||||
unset($dom); |
||||
?> |
||||
@ -0,0 +1,137 @@ |
||||
<?php |
||||
// $Rev: 169 $ |
||||
// ----------------------------------------------------------------------------- |
||||
// setup |
||||
error_reporting(E_ALL); |
||||
require_once('../simple_html_dom.php'); |
||||
$dom = new simple_html_dom; |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// comments test |
||||
$str = <<<HTML |
||||
<div class="class0" id="id0" > |
||||
<!-- |
||||
<input type=submit name="btnG" value="go" onclick='goto("url0")'> |
||||
--> |
||||
</div> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('input'))==0); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// <code> test |
||||
$str = <<<HTML |
||||
<div class="class0" id="id0" > |
||||
<CODE> |
||||
<input type=submit name="btnG" value="go" onclick='goto("url0")'> |
||||
</CODE> |
||||
</div> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('code'))==1); |
||||
assert(count($dom->find('input'))==0); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// <pre> & <code> test |
||||
$str = <<<HTML |
||||
<PRE><CODE CLASS=Java> |
||||
<input type=submit name="btnG" value="go" onclick='goto("url0")'> |
||||
</CODE></PRE> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('pre'))==1); |
||||
assert(count($dom->find('input'))==0); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// <script> & <style> test |
||||
$str = <<<HTML |
||||
<script type="text/javascript" src="test.js"></script> |
||||
<script type="text/javascript" src="test.js"/> |
||||
|
||||
<style type="text/css"> |
||||
@import url("style.css"); |
||||
</style> |
||||
|
||||
<script type="text/javascript"> |
||||
var foo = "bar"; |
||||
</script> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('style'))==1); |
||||
assert(count($dom->find('script'))==3); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// php short tag test |
||||
$str = <<<HTML |
||||
<a href="<?=h('ok')?>">hello</a>
|
||||
<input type=submit name="btnG" value="<?php echoh('ok')?>">
|
||||
HTML; |
||||
$dom->load($str); |
||||
assert($dom->find('a', 0)->href==="<?=h('ok')?>");
|
||||
assert($dom->find('input', 0)->value==="<?php echoh('ok')?>");
|
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// noise stripping test |
||||
$str = <<<HTML |
||||
<!-- |
||||
<img class="class0" id="id0" src="src0">--> |
||||
<img class="class1" id="id1" src="src1"> |
||||
<!--<img class="class2" id="id2" src="src2"> |
||||
--> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('img'))==1); |
||||
assert($dom==$str); |
||||
// ----------------------------------------------- |
||||
$str = <<<HTML |
||||
<script type="text/javascript" src="test1.js">ss</script> |
||||
<script type="text/javascript" src="test2.js"/> |
||||
<script type="text/javascript" src="test3.js" /> |
||||
<script type="text/javascript" src="test4.js" |
||||
/> |
||||
|
||||
<script type="text/javascript" src="test5.js"/> |
||||
|
||||
<style> |
||||
@import url("style1.css"); |
||||
</style> |
||||
|
||||
<script> |
||||
var foo = "bar"; |
||||
</script> |
||||
|
||||
<style type="text/css"> |
||||
@import url("style2.css"); |
||||
</style> |
||||
|
||||
<style> |
||||
div,td,.n a,.n a:visited{color:#000}.ts td,.tc{padding:0}.ts,.tb{border-collapse:collapse}.ti,.bl{display:inline}.ti{display:inline-table}.f,.m{color:#666}.flc,a.fl{color:#77c}a,.w,.q:visited,.q:active,.q,.b a,.b a:visited,.mblink:visited{color:#00c}a:visited{color:#551a8b}a:active{color:red}.t{background:#d5ddf3; |
||||
color:#000; |
||||
padding:5px 1px 4px}.bb{border-bottom:1px solid #36c}.bt{border-top:1px solid #36c}.j{width:34em}.h{color:#36c}.i{color:#a90a08}.a{color:green}.z{display:none}div.n{margin-top:1ex}.n a,.n .i{font-size:10pt}.n .i,.b a{font-weight:bold}.b a{font-size:12pt}.std{font-size:82%}#np,#nn,.nr,#logo span,.ch{cursor:pointer;cursor:hand}.ta{padding:3px 3px 3px 5px}#tpa2,#tpa3{padding-top:9px}#gbar{float:left;height:22px;padding-left:2px}.gbh,.gb2 div{border-top:1px solid #c9d7f1; |
||||
</style> |
||||
|
||||
<!-- BEGIN ADVERTPRO ADVANCED CODE BLOCK --> |
||||
|
||||
<script language="JavaScript" type="text/javascript"> |
||||
<!-- |
||||
document.write('<SCR'+'IPT src="zone?zid=159&pid=0&random='+Math.floor(89999999*Math.random()+10000000)+'&millis='+new Date().getTime()+'" language="JavaScript" type="text/javascript"></SCR'+'IPT>'); |
||||
//--> |
||||
</script> |
||||
|
||||
<!-- END ADVERTPRO ADVANCED CODE BLOCK --> |
||||
|
||||
<script type="text/javascript"> |
||||
var foo = "bar"; |
||||
</script> |
||||
HTML; |
||||
$dom->load($str); |
||||
assert(count($dom->find('script'))==8); |
||||
assert(count($dom->find('style'))==3); |
||||
//echo "\n\n\n\n".$dom->save(); |
||||
assert($dom==$str); |
||||
|
||||
// ----------------------------------------------------------------------------- |
||||
// tear down |
||||
$dom->clear(); |
||||
unset($dom); |
||||
?> |
||||
@ -0,0 +1,24 @@ |
||||
{ |
||||
"name": "sunra/php-simple-html-dom-parser", |
||||
"type": "library", |
||||
"description": "Composer adaptation of: A HTML DOM parser written in PHP5+ let you manipulate HTML in a very easy way! Require PHP 5+. Supports invalid HTML. Find tags on an HTML page with selectors just like jQuery. Extract contents from HTML in a single line.", |
||||
"keywords": ["html", "dom", "parser"], |
||||
"homepage": "https://github.com/sunra/php-simple-html-dom-parser", |
||||
"license": "MIT", |
||||
"authors": [ |
||||
{ |
||||
"homepage": "http://sourceforge.net/projects/simplehtmldom/" |
||||
}, |
||||
{ |
||||
"name": "Sunra", |
||||
"email": "sunra@yandex.ru", |
||||
"homepage": "https://github.com/sunra" |
||||
} |
||||
], |
||||
"require": { |
||||
"php": ">=5.3.2" |
||||
}, |
||||
"autoload": { |
||||
"psr-0": { "Sunra\\PhpSimple\\HtmlDomParser": "Src/" } |
||||
} |
||||
} |
||||
Loading…
Reference in new issue