PHP DOM:将HTML列表解析为数组?

时间:2012-04-28 18:42:27

标签: php dom php-5.3 html-parsing

我想将html列表转换为数组,

$string = '
<a href="#" class="something">1</a>
<a href="#" class="something">2</a>
<a href="#" class="something">3</a>
<a href="#" class="something">4</a>
';

我正在研究DOM方法,

$dom = new DOMDocument;
$dom->loadHTML($string);
foreach( $dom->getElementsByTagName('a') as $node)
{
    $array[] = $node->nodeValue; 
}

print_r($array);

结果,

Array ( [0] => 1 [1] => 2 [2] => 2 [3] => 4)

但我实际上正在寻找这样的结果,

Array ( 
[0] => <a href="#" class="something">1</a>
[1] => <a href="#" class="something">2</a> 
[2] => <a href="#" class="something">3</a>
[3] => <a href="#" class="something">4</a>
)

有可能吗?

1 个答案:

答案 0 :(得分:19)

将节点传递给DOMDocument::saveHTML以获取其HTML表示:

$string = '
<a href="#" class="something">1</a>
<a href="#" class="something">2</a>
<a href="#" class="something">3</a>
<a href="#" class="something">4</a>
';

$dom = new DOMDocument;
$dom->loadHTML($string);
foreach($dom->getElementsByTagName('a') as $node)
{
    $array[] = $dom->saveHTML($node);
}

print_r($array);

结果:

Array
(
    [0] => <a href="#" class="something">1</a>
    [1] => <a href="#" class="something">2</a>
    [2] => <a href="#" class="something">3</a>
    [3] => <a href="#" class="something">4</a>
)

顺便说一下,只适用于PHP 5.3.6及更高版本。