【问题标题】:PHP DOM: parsing a HTML list into an array?PHP DOM:将 HTML 列表解析为数组?
【发布时间】:2012-05-09 03:15:44
【问题描述】:

我有下面的 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>
';

这是我当前使用 DOMDocument 的代码:

$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>
)

这可能吗?

【问题讨论】:

    标签: php dom php-5.3 html-parsing


    【解决方案1】:

    将节点传递给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 及更高版本。

    【讨论】:

    • 非常感谢您的回答!
    • 不错,不知道新的节点参数。
    猜你喜欢
    • 2017-09-08
    • 1970-01-01
    • 2012-08-24
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 2016-10-30
    相关资源
    最近更新 更多