PHP:Simple DOM Parser如何迭代这个html

PHP:Simple DOM Parser如何迭代这个html

问题描述:

I trying to iterate over this following html using simple html dom parser but not getting to next node.

<div class="category-products">
<ul class="products-grid">
    <li><a href="http://someurl.com">Text</a></li>
    <li><a href="http://someurl.com">Text</a></li>
    <li><a href="http://someurl.com">Text</a></li>
</ul>
<ul class="products-grid">
    <li><a href="http://someurl.com">Text</a></li>
    <li><a href="http://someurl.com">Text</a></li>
    <li><a href="http://someurl.com">Text</a></li>
</ul>
<ul class="products-grid">
    <li><a href="http://someurl.com">Text</a></li>
    <li><a href="http://someurl.com">Text</a></li>
    <li><a href="http://someurl.com">Text</a></li>
</ul>
</div>

I want to iterate over each li and a for ul.products-grid but i am not getting to next ul tag I have used this code yet.

require_once('simple_html_dom.php');
set_time_limit(0);
ini_set('memory_limit', '1024M');
$url='http://www.somesite.com';
$html = file_get_html($url);

if(is_object($html)){
    foreach ( $html->find('div.category-products') as $elem){
        $data = $elem->innertext;
        $strdata = str_get_html($data);
        foreach ($strdata->find('ul[class="products-grid"]') as $ul) {
                //not getting how to iterate over next ul tags
        }
        die;
    }
}

Any body having any idea please help to sort it out. Thanks

我尝试使用简单的html dom解析器迭代以下html,但没有进入下一个节点。 p>

 &lt; div class =“category-products”&gt; 
&lt; ul class =“products-grid”&gt; 
&lt; li&gt;&lt; a href =“http:/  /someurl.com">Text</a></li>
&lt; li&gt;&lt; a href =“http://someurl.com”&gt;文字&lt; / a&gt;&lt; / li&gt; \  n&lt; li&gt;&lt; a href =“http://someurl.com”&gt;文字&lt; / a&gt;&lt; / li&gt; 
&lt; / ul&gt; 
&lt; ul class =“products-grid”&gt;  
&lt; li&gt;&lt; a href =“http://someurl.com”&gt;文字&lt; / a&gt;&lt; / li&gt; 
&lt; li&gt;&lt; a href =“http:// someurl。  com“&gt;文字&lt; / a&gt;&lt; / li&gt; 
&lt; li&gt;&lt; a href =”http://someurl.com“&gt;文字&lt; / a&gt;&lt; / li&gt; 
&lt; /  ul&gt; 
&lt; ul class =“products-grid”&gt; 
&lt; li&gt;&lt; a href =“http://someurl.com”&gt;文字&lt; / a&gt;&lt; / li&gt; 
&lt;  ; li&gt;&lt; a href =“http://someurl.com”&gt;文字&lt; / a&gt;&lt; / li&gt; 
&lt; li&gt;&lt; a href =“http://someurl.com”&gt;  ;文本 &lt; / a&gt;&lt; / li&gt; 
&lt; / ul&gt; 
&lt; / div&gt; 
  code>  pre> 
 
 

我想迭代每个li和a for ul .products-grid但我没有进入下一个ul标签 我已经使用过这段代码。 p>

  require_once('simple_html_dom.php'); 
set_time_limit(0);  
ini_set('memory_limit','1024M'); 
 $ url ='http://www.somesite.com'; 
 $ html = file_get_html($ url); 
 
if(is_object($ html)  ){
 foreach($ html-&gt; find('div.category-products')as $ elem){
 $ data = $ elem-&gt; innertext; 
 $ strdata = str_get_html($ data); \  n foreach($ strdata-&gt; find('ul [class =“products-grid”]')$ ul){
 //无法获取如何迭代下一个ul标签
} 
 die; 
  } 
} 
  code>  pre> 
 
 

任何有任何想法的机构请帮忙整理出来。 谢谢 p> div>

You're overcomplicating it:

foreach ( $html->find('div.category-products li a') as $a){
  // do something with $a
}

You may try this

$url='http://www.somesite.com';
$html = file_get_html($url);
if(is_object($html)){
    foreach ( $html->find('div.category-products .products-grid') as $ul){
        // To iterate al li tags use following
        foreach ( $ul->find('li') as $li )  echo $li. '<br />';
        // To iterate al a tags use following
        foreach ( $ul->find('li a') as $a ) echo $a. '<br />';
    }
}