2016-11-24 8 views
0

私はいくつかのHTMLを読み込み、 'ul li span'と 'ul li strong'の結果から連想配列を作成しようとしています。スパンには最初の値が含まれ、強いスパンには2番目の値が含まれます。私はこれを試してみましたとき、私はエラーを取得するDOM getElementsByTagNameと連想配列を作成

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; 
} 

であり、あなたはスパンがタイトルとで見ることができるように

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

を次のようにHTMLが見えます強い値です。 Jqueryでは、私はちょうど$( 'ul span')を行うことができました。と$( 'ul strong');私は李のループを通り抜けて、それを選んでいるのですか?私は何とかこれが間違っていることを知っているが、私は別々に両方をフェッチするなどの他のメソッドを試した後にアプローチする方法はわかりませんが、DOMを使用してこれを行う方法がわかりません。

答えて

3

<ul>は1つだけです。お探しの<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); 
} 
0

あなたのループでは、1つのulではなく、その上を移動する必要があります。

// 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; 
}