Как вывести данные с get contents?

Пытаюсь вывести данные из ссылки, данные приходят в следующем формате:

<datastructure xmlns="////" xmlns:xs="http://urlblabla" xmlns:xsi="http://url">
<product_name>Ноутбук </product_name>
</datastructure>

Пытаюсь выловить и засунуть в переменную следующим образом:

$data = file_get_contents($url, false, $context);
  print_r($data); //тут всё ок, выводит
?>

<?php preg_match("/<product_name>(.*)<\/product_name>/",$data,$product_name);
    $product_name = strip_tags($product_name[0]);
?>
<div>Product name: <?=$product_name?></div>

Где моя ошибка, подскажите пожалуйста


Ответы (1 шт):

Автор решения: pgood

Если вы обрабатываете XML-данные, то лучше использовать специализированные библиотеки, например DOM или SimpleXML. Приведу пример, как достать данные из DOM с помощью XPath

<?php
$data = file_get_contents($url, false, $context);
$dd = new DOMDocument();
$dd->loadXML($data);
$xp = new DOMXpath($dd);
// в случае вашего XML,
// есть пространство имен по умолчанию xmlns="////",
// поэтому его надо учитывать
$xp->registerNamespace('ns','////');
?>
<div>Product name: <?= $xp->evaluate('string(//ns:product_name)'); ?></div>

Р.S. Если данные в utf-8 лучше использовать mb_ereg вместо preg_match

→ Ссылка