PHP SimpleXML выберите атрибуты - PullRequest
       2

PHP SimpleXML выберите атрибуты

0 голосов
/ 15 сентября 2010

У меня есть фид XML, который выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<productFeed version="1.0" timestamp="20100910:04:06:55">
<product id="196">
    <name>Lorem</name>
    <price>190.00</price>
    <description>Lorem Ipsum</description>
    <productURL> http://www.example.com</productURL>
    <imageURL> http://www.example.com/lorem.jpg </imageURL>
    <additional>
        <field name="country" value="IT" />
        <field name="region" value="Rome" />
        <field name="city" value="Rome" />
    </additional>
    <categories>
        <category name="foobar" />
    </categories>
</product> 
</productFeed>

Я пытаюсь распечатать атрибут категории, среди прочего, с помощью этого скрипта:

<?php
$url = 'lorem.xml';
$xml = simplexml_load_file($url);
$expr = "/productFeed//product/additional/field[@value='Rome']/parent::*/parent::*";
$result = $xml->xpath($expr);

foreach($result as $item) {
    echo $item->name;
    echo $item->imageURL;
    echo $item->description;
    echo $item->price;
    echo $item->category->attributes()->name;
}

Это дает:

Предупреждение: main () [function.main]: узел больше не существует

ошибка, хотя плагин FireXPath Firebug говорит мне, что я тоже правильно выбираю атрибуты.

1 Ответ

4 голосов
/ 15 сентября 2010

У вас есть опечатка!

Его:

echo $item->categories->category->attributes()->name;

Не

echo $item->category->attributes()->name;

Для всего:

foreach($result as $item) {
  echo $item->name;
  echo $item->imageURL;
  echo $item->description;
  echo $item->price;
  echo $item->category->attributes()->name;
    foreach($item->additional->field as $field)
    {
        echo $field["name"];
        echo $field["value"];
    }
}


Удачи

...