Wyodrębnianie danych z HTML za pomocą PHP i xPath

Próbuję wyodrębnić dane ze strony internetowej, aby wstawić je do bazy danych. Dane, którymi jestem zainteresowany, znajdują się w div, które mają klasę „firma”. Na jednej stronie jest 15 lub mniej div, a jest wiele stron, z których próbuję wyodrębnić te dane. Z tego powodu próbuję znaleźć automatyczne rozwiązanie do ekstrakcji danych.

Div z class = „company” jest następujący (na jednej stronie jest 15 lub mniej divów na różnych stronach):

<div class="company" id="company-6666"> <!-- EXTRACT 'company-6666' from id="company-6666" -->

  <div class="top clearfix">
    <div class="name clearfix">
      <h2>
        <a href="/company-name">Company Name</a>&nbsp; <!-- EXTRACT 'Company Name' from contents of A element and EXTRACT '/company-name' from href attribute -->
        <a href="/branches-list-link?parent_id=6666" class="branches">Branches <span>(5)</span></a> <!-- EXTRACT '/branches-list-link?parent_id=6666' from href attribute -->               
      </h2>
    </div>
  </div>

  <div class="inner clearfix has-logo">

    <div class="clearfix">          
      <div class="logo">
        <a href="/company-name">
          <img src="/graphics/company/logo/listing/123456.jpg?_ts=1365390237" border="0" alt="" /> <!-- EXTRACT '/graphics/company/logo/listing/123456.jpg?_ts=1365390237' from src attribute -->
        </a>
      </div>
      <div class="info">
        <div class="address">StreetName 500, 7777 City, County</div> <!-- EXTRACT 'StreetName 500, 7777 City, County' from contents of class="address" div -->
        <div class="clearfix">
          <div class="slogan">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ac condimentum mi.</div> <!-- EXTRACT 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ac condimentum mi.' from contents of class="slogan" div -->
        </div>
      </div>
    </div>

    <div class="actions-bar clearfix">
      <ul>              
        <li><span class="phone-number">6666666</span></li> <!-- EXTRACT '6666666' from contents of class="phone-number" div -->
        <li><a href="mailto:[email protected]" target="_blank" title="[email protected]" class="email">[email protected]</a></li> <!-- EXTRACT '[email protected]' from contents of class="email" div -->
        <li><a href="http://www.webpage.com" target="_blank" title="www.webpage.com" class="redirect url">www.webpage.com</a></li> <!-- EXTRACT 'www.webpage.com' from contents of class="redirect url" div -->
      </ul>
    </div>

  </div>

</div>

Do tej pory mam następujący kod PHP ($ output ma kod HTML strony):

<?php

$doc = new DomDocument();
@$doc->loadHTML($output);
$doc->preserveWhiteSpace = false; 

$xpath = new DomXPath($doc);

$elements = $xpath->query("//*[@class='company']");

if (!is_null($elements)) {
    foreach ($elements as $element) {
        echo $element->nodeValue;
    }
}

?>

Wydaje się, że pobiera wszystkie 15 div z class = "company", ale nie mam pojęcia, jak wyodrębnić wspomniane wcześniej (w komentarzach kodu HTML) indywidualne wartości.

Każdy div (mówię o div z class = "company") nie ma wszystkich wartości zapisanych w bloku HTML. Więc jakoś muszę zrobić zapytanie, jeśli określony div wewnątrz firmy div, gdzie dane, które mnie interesują, istnieje i jeśli istnieje, muszę sprawdzić, czy nie jest pusty (zawiera tekst między tagami lub nie). Jeśli istnieje i nie jest pusty, dodaję go do zmiennej.

Po wyodrębnieniu wartości chciałbym przypisać je do zmiennych PHP, które pozwolą mi pracować z nimi później. Byłoby jeszcze lepiej, gdyby wyodrębnione wartości były umieszczone w tablicy w taki sposób:

$result = array(
    // 1'st div's data
    [0] =>  
        'company name' => 'company name',
        'company link' => 'company link',
        'company id' => 'company id',
        'company branches'  => 'branches link',
        'company logo'  => 'logo',
        'company address'  => 'address',
        'company slogan'  => 'slogan',
        'company webpage'  => 'webpage',
        'company email'  => 'email',
        'company phone'  => 'phone'

    // 2'nd div's data
    [1] =>  
        'company name' => 'company name',
        'company link' => 'company link',
        'company id' => 'company id',
        'company branches'  => 'branches link',
        'company logo'  => 'logo',
        'company address'  => 'address',
        'company slogan'  => 'slogan',
        'company webpage'  => 'webpage',
        'company email'  => 'email',
        'company phone'  => 'phone'
    ...
    )

questionAnswers(2)

yourAnswerToTheQuestion