Need help accessing PHP DOM elements

Posted by Michael Pasqualone on Stack Overflow See other posts from Stack Overflow or by Michael Pasqualone
Published on 2010-05-16T08:20:45Z Indexed on 2010/05/16 8:30 UTC
Read the original article Hit count: 277

Filed under:
|
|

Hey guys, I have the following HTML structure that I am trying to pull information from:

// Product 1
<div class="productName">
 <span id="product-name-1">Product Name 1</span>
</div>

<div class="productDetail">            
 <span class="warehouse">Warehouse 1, ACT</span>                
 <span class="quantityInStock">25</span>
</div>

// Product 2
<div class="productName">
 <span id="product-name-2">Product Name 2</span>
</div>

<div class="productDetail">            
 <span class="warehouse">Warehouse 2, ACT</span>                
 <span class="quantityInStock">25</span>
</div>

…

// Product X
<div class="productName">
 <span id="product-name-X">Product Name X</span>
</div>

<div class="productDetail">            
 <span class="warehouse">Warehouse X, ACT</span>                
 <span class="quantityInStock">25</span>
</div>

I don't have control of the source html and as you'll see productName and it's accompanying productDetail are not contained within a common element.

Now, I am using the following php code to try and parse the page.

$html = new DOMDocument();
$html->loadHtmlFile('product_test.html');

$xPath = new DOMXPath($html);

$domQuery = '//div[@class="productName"]|//div[@class="productDetail"]';

$entries = $xPath->query($domQuery);

foreach ($entries as $entry) { 
 echo "Detail: " . $entry->nodeValue) . "<br />\n";
}

Which prints the following:

Detail: Product Name 1
Detail: Warehouse 1, ACT
Detail: 25
Detail: Product Name 2
Detail: Warehouse 2, ACT
Detail: 25
Detail: Product Name X
Detail: Warehouse X, ACT
Detail: 25

Now, this is close to what I want. But I need to do some processing on each Product, Warehouse and Quantity stock and can't figure out how to parse it out into separate product groups. The final output I am after is something like:

Product 1:
Name: Product Name 1
Warehouse: Warehouse 1, ACT
Stock: 25

Product 2:
Name: Product Name 2
Warehouse: Warehouse 2, ACT
Stock: 25 

I can't just figure it out, and I can't wrap my head around this DOM stuff as the elements don't quite work the same as a standard array.

If anyone can assist, or point me in the right direction I will be ever appreciative.

© Stack Overflow or respective owner

Related posts about php

Related posts about dom