Отображение двух элементов из файла XML - PullRequest
1 голос
/ 22 января 2012

Файл можно увидеть по следующему URL: #

Приведенный выше XML-файл состоит из двух элементов, которые я хочу показать в порядке: «продукт» и «предложение».

Я использую SimpleXML для загрузки канала XML.

$ text = simplexml_load_file ('feed.xml');

Я также использую foreach для отображения данныхиз файла

foreach ($text->categories->category->items->product as $product) {}

Как можно отобразить «продукт» и «предложение» из файла XML, используя для каждого оператора или любой другой метод?

Ответы [ 2 ]

1 голос
/ 23 января 2012

Содержит ли <items> только <product> и <offer> элементы?Если это так:

foreach ($text->categories->category->items->children() as $product_or_offer) {
    // Do something
}

См. http://php.net/simplexmlelement.children


Если вы хотите быть откровенным только о получении элементов продукта / предложения, можно использовать простое выражение XPath.

$items = $text->categories->category->items;
$items->registerXPathNamespace('so', 'urn:types.partner.api.url.com');
foreach ($items->xpath('so:offer|so:product') as $product_or_offer) {
    // Do something
}
1 голос
/ 23 января 2012

Хотя я все еще не совсем понимаю, что вы хотели бы получить, я опубликую несколько примеров того, как работать с этим XML через xPath.

Прежде всего выберите все product и offer узлы:

$xml = simplexml_load_file('feed.xml');

// Make sure to register custom namespace
$xml->registerXPathNamespace('ns', 'urn:types.partner.api.url.com');

$products = $xml->xpath('//ns:product');
$offers   = $xml->xpath('//ns:offer');

echo count($products); // Number of all product nodes
echo count($offers); // Number of offer nodes

Базовая итерация:

<code>foreach ($products as $product) {
    //echo '<pre>'; print_r($product); echo '
';echo '
'; echo $product->name . ', ' . $product->minPrice; echo '
';}
...