2014-11-10 2 views
1

Я только начал использовать Xpath для проекта в PHP. Я должен получить индивидуальные цены для каждого продукта с веб-сайта. Информация цена каждого отдельного продукта имеет следующий формат:Получить весь текст в родительском узле с помощью xpath

<div class="priceStockDetail"> 
    <dl> 
     <dt>Across any 6</dt> 
     <dd><span class='price '><span class='currency'>$</span>20<span class=cents>.90</span></span></dd> 

     <dt>Each</dt> 
     <dd><span class='price '><span class='currency'>$</span>22<span class=cents>.00</span></span></dd> 
    </dl> 
</div> 

Я желаю, чтобы получить только текст после <dt>Each</dt> как один («$ 22,00» для приведенного выше примера) с выражением XPath.

Любая помощь будет принята с благодарностью.

ответ

0

Вы можете либо нацеливать каждый элемент кусочка, либо конкатенировать, либо просто нацеливать родителя и получать nodeValue. Пример:

$dom = new DOMDocument(); 
$dom->loadHTML($html_string); 
$xpath = new DOMXpath($dom); 

$data = array(); 
$products = $xpath->query('//dt'); 
if($products->length > 0) { 
    foreach($products as $product) { 
     $product_name = $product->nodeValue; 

     // either get individually 

     // $currency = $xpath->evaluate('string(./following-sibling::dd[1]/span/span[@class="currency"])', $product); 
     // $price = $xpath->evaluate('string(./following-sibling::dd[1]/span/span[@class="currency"]/following-sibling::text())', $product); 
     // $cents = $xpath->evaluate('string(./following-sibling::dd[1]/span/span[@class="cents"])', $product); 
     // $product_price = $currency.$price.$cents; 

     // or 
     $product_price = $xpath->evaluate('string(./following-sibling::dd[1]/span)', $product); 


     $data[] = array(
      'product_name' => $product_name, 
      'product_price' => $product_price, 
     ); 
    } 
} 

echo '<pre>'; 
print_r($data); 

Sample Output

+0

Спасибо за помощь! – jkrix

+0

@jkrix уверен, что это помогло – Ghost

+1

Почему вы не используете '$ product_price = $ xpath-> evaluation ('string (./ follow-sibling :: dd [1]/span)', $ product);'? – ThW

Смежные вопросы