соскоб с xpath, выдав ошибку - PullRequest
3 голосов
/ 27 марта 2011

Я пытаюсь получить текст со страницы, используя xpath, теперь я получаю сообщение об ошибке и не знаю почему! - имея в виду, что я очень новый пользователь php, это для университетского проекта, который я взял на себя, и он доказывает, что он очень сложный: P, но эй, это должно быть.

Вот код,

<?php

$html = file_get_contents('http://www.amazon.co.uk/New-Apple-iPod-touch-Generation/dp/B0040GIZTI/ref=br_lf_m_1000333483_1_1_img?ie=UTF8&s=electronics&pf_rd_p=229345967&pf_rd_s=center-3&pf_rd_t=1401&pf_rd_i=1000333483&pf_rd_m=A3P5ROKL5A1OLE&pf_rd_r=1ZW9HJW2KN2C2MTRJH60');

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

$xpath = new DOMXpath($dom);

$in_stock = $xpath->query("/html/body/div[@id='divsinglecolumnminwidth']/form[@id='handleBuy']/table[3]/tbody/tr[3]/td/div/span");



?>

Я получаю следующую ошибку ...

Предупреждение: DOMDocument :: loadHTML () [domdocument.loadhtml]: неожиданный конец тег: голова в Entity, строка: 2664 в C: \ XAMPP \ HTDOCS \ выскабливание \ domxpath.php по линии 19

Около ста раз!

Любая помощь действительно ценится! , это должно быть действительно легко исправить: P

Ответы [ 3 ]

2 голосов
/ 27 марта 2011

Просто поместите эту строку первой в своем коде, чтобы перестать отображать ошибки, это особенно полезно, когда ваш документ является HTML-страницей и если вы не знаете, является ли он правильно сформированным документом XML.

libxml_use_internal_errors(true);

http://fr2.php.net/manual/fr/function.libxml-use-internal-errors.php

1 голос
/ 27 марта 2011
$xpath = new DOMXpath($dom);

$expr = "/html/body/div[@id='divsinglecolumnminwidth']/form[@id='handleBuy']/table[3]/tr[3]/td/div/span";
$nodes = $xpath->query($expr); // returns DOMNodeList object
// you can check length property i.e. $nodes->length
echo $nodes->item(0)->nodeValue; // get first DOMNode object and its value

Также необходимо добавить stametent для подавления ошибок .Я думаю, что из соображений производительности лучше использовать абсолютное выражение XPath, но относительная // form [@ id = 'handleBuy'] / table [3] / tr [3] / td / div / span работает также и более гибко.

1 голос
/ 27 марта 2011

Может быть попробовать это:

//form[@id='handleBuy']/table[3]/tbody/tr[3]/td/div/span
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...