php解析html文件的多个变量

时间:2018-02-21 11:16:03

标签: php html json parsing foreach

我想通过PHP解析以下HTML:https://pastebin.com/raw/5Z59HTcW 问题是并不总是应该解析一行而是总是应该在一个foreach中解析所有3个span元素

这是我目前的代码:

$json_object= file_get_contents($url);
$json_decoded = json_decode($json_object);

preg_match_all('/<span class="(name|price|description)">(.*)<\/span>/',$json_decoded->results_html, $sor);

foreach($sor[1] as $k => $v)
{
echo "Name" .$v[0]."<br/>";
echo "price" .$v[1]."<br/>";
echo "des" .$v[2]."<br/>";
}

谢谢你, 最诚挚的问候

2 个答案:

答案 0 :(得分:0)

使用DOMDocument解析HTML非常简单 - 甚至不需要此实例中所需的任何XPath

    $url='https://pastebin.com/raw/5Z59HTcW';
    $dom=new DOMDocument;
    $dom->loadHTMLFile( $url );

    $col=$dom->getElementsByTagName('span');
    if( $col->length > 0 ){
        foreach( $col as $span ){
            echo $span->getAttribute('class').' '.$span->nodeValue . '<br />';
        }
    }

输出:

name Test1
description testtest1
price 1 USD
name Test2
description testtest2
price 2 USD
name Test3
description testtest3
price 3 USD

答案 1 :(得分:0)

我们可以使用loadHTML

进行遍历
$htmlContent = '<span class="name">Test1</span> 
<span class="description">testtest1</span>
<span class="price">1 USD</span>

<span class="name">Test2</span>
<span class="description">testtest2</span>
<span class="price">2 USD</span>

<span class="name">Test3</span> 
<span class="description">testtest3</span>
<span class="price">3 USD</span>';

$DOM = new DOMDocument();
$DOM->loadHTML($htmlContent);

$Header = $DOM->getElementsByTagName('span');

//#Get header name of the table
foreach($Header as $NodeHeader)
{
    $aDataTableHeaderHTML[] = trim($NodeHeader->textContent);
}

echo '<pre>';
print_r($Header);
echo '</pre>';

echo '<table border="1"><thead><tr><td>Name</td><td>Desc</td><td>Price</td></tr></thead><tbody>';
$lastOne = '';
foreach(array_chunk($aDataTableHeaderHTML,3) as $key=>$v)
 {
    echo "<tr>
           <td>$v[0]</td>
           <td>$v[1]</td>
           <td>$v[2]</td>        
       </tr>";
 }
 echo '</tbody></table>';

输出:

DOMNodeList Object
(
    [length] => 9
 )

Name      Desc      Price
Test1   testtest1   1 USD
Test2   testtest2   2 USD
Test3   testtest3   3 USD