DOM getElementsByTagName并创建一个关联数组

时间:2016-11-24 10:50:22

标签: php arrays dom associative-array

我试图读取一些html,然后根据'ul li span'和'ul li strong'的结果创建一个关联数组。跨度将包含第一个值,而强大的第二个值。当我尝试这个时,我得到了错误

Trying to get property of non-object

我的php是

// Start the process of stripping the elements and putting in an assocative array 
libxml_use_internal_errors(true);

$dom = new DOMDocument();
$dom->loadHTML($result);


$results = array();  

 // Get all li elements on the page
foreach ($dom->getElementsByTagName('ul') as $ul) {        
    $results[$ul->getElementsByTagName('span')->item(0)->textContent]=$ul->getElementsByTagName('strong')->item(1)->textContent;
}

和html看起来如下

<ul class="ul-data">

    <li>
        <span>Vehicle make </span>
        <strong>AUDI</strong>
    </li>


    <li id="date">
        <span>Date of first registration </span>
        <strong>31 March 2005</strong>
    </li>a

    <li>
        <span>Year of manufacture </span>
        <strong>1999</strong>
    </li>

    <li id="cc">
        <span>Cylinder capacity (cc) </span>
        <strong>2993 cc</strong>
    </li>

    <li>
        <span>CO₂Emissions </span>
        <strong id="CO2EmissionShown">142 g/km</strong>
    </li>

    <li id="fuel">
        <span>Fuel type </span>
        <strong id="FuelTypeShown">DIESEL</strong>
    </li>

    <li>
        <span>Export marker </span>
        <strong>No</strong>
    </li>
    <li>
        <span>Vehicle status </span>
        <strong>Tax not due</strong>
    </li>
    <li>
        <span>Vehicle colour </span>
        <strong>GREY</strong>
    </li>
    <li>
        <span>Vehicle type approval </span>
        <strong>M1</strong>
    </li>

    <li>
        <span>Wheelplan </span>
        <strong>2 AXLE RIGID BODY</strong>
    </li>

    <li>
        <span>Revenue weight </span>
        <strong>Not available</strong>
    </li>

</ul>

正如您所看到的那样,span是标题,而strong是值。在Jquery我可以做$('ul span');和$('ul strong');我是否正确地循环利用并选择它们?我知道这是错误的,但我不确定如何尝试其他方法,例如单独获取两个,但我不知道如何使用DOM。

2 个答案:

答案 0 :(得分:3)

只有一个<ul>,而您正在寻找的<strong>item(0)

foreach ($dom->getElementsByTagName('li') as $li) {
    $key = $li->getElementsByTagName('span')->item(0)->textContent;
    $value = $li->getElementsByTagName('strong')->item(0)->textContent;
    $results[trim($key)] = trim($value);
}

答案 1 :(得分:0)

在你的循环中,你应该超过li而不是那个。

// Get all li elements on the page
foreach ($dom->getElementsByTagName('li') as $li) {        
    $results[$li->getElementsByTagName('span')->item(0)->textContent]=$li->getElementsByTagName('strong')->item(0)->textContent;
}