Двойной Xpath с PHP не работает - PullRequest
0 голосов
/ 27 мая 2011

Я на php и успешно загрузил HTML-документ через URL. Теперь я также успешно обработал первый XPath, но мой второй на том же DOMDocument (), кажется, всегда дает сбой, без ошибок, но только без результатов. Это мой код или что-то еще, что я пропускаю (я пытаюсь проверить информацию с сайта App-Store от Apple, фактически описание указанного приложения:

//retrieving description
$path2 = "//div[@class='product-review'][1]/p[@class='truncate']";
$result_row = $xpath->query($path2);
print_r($result_row);
foreach($result_row as $rows){
  echo "haben was";
  print_r($rows);
  $desc = $rows->childNodes->item(0)->textContent();
}

Ответы [ 2 ]

0 голосов
/ 28 мая 2011

Это похоже на проблему с пространством имен.Ваш пример HTML-источника начинается с

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.apple.com/itms/" lang="de">

xmlns означает, что документ имеет пространство имен по умолчанию, поэтому все ваши запросы XPath должны ссылаться на это пространство имен, чтобы найти какие-либо элементы.(Как ни странно, они утверждают в doctype, что это документ XHTML, но им не удалось установить его в пространстве имен XHTML.)

Вам необходимо зарегистрировать пространство имен по умолчанию, используемое <html>.Поскольку <html> находится в пространстве имен по умолчанию, у него нет префикса, но для того, чтобы ваш XPath работал, вам необходимо также связать это пространство имен с некоторым префиксом, а затем использовать этот префикс в выражении XPath.

$your_xml_doc->registerXPathNamespace("ns", "http://www.apple.com/itms/");
$path2 = "//ns:div[@class='product-review'][1]/ns:p[@class='truncate']";

Выражения XPath (1.0) без префикса пространства имен всегда соответствуют только целям в пространстве без имен.

0 голосов
/ 27 мая 2011

Вы можете получить практически все, кроме отзывов покупателей из AppStore, используя общедоступный API :

$appStore = json_decode(
    file_get_contents(
        'http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/wa/wsLookup?id=387851294'
    )
);
echo $appStore->results[0]->description;

Пример полного результата Json

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...