Синтаксический вопрос: доступ к объекту PHP - PullRequest
0 голосов
/ 18 июня 2011

У меня есть объект, возвращенный из $ xml = simplexml_load_file ($ file). Я пытаюсь получить доступ к «location-id» и «item-id», но не могу понять, как получить доступ к этим частям информации. Если бы он был вложен только один раз, я знаю, что мог бы сделать что-то вроде $ xml -> {'item-id'}, но это не сработало. Какой синтаксис для этого? Извините за отсутствие форматирования ... вот как это было возвращено в моем браузере.

SimpleXMLElement Object (
    [item] => Array (
        [0] => SimpleXMLElement Object (
            [@attributes] => Array (
                [item-id] => AAA )
            [locations] => SimpleXMLElement Object (
                [location] => SimpleXMLElement Object (
                    [@attributes] => Array (
                        [location-id] => 111
                    )
                    [quantity] => 1
                    [pick-up-now-eligible] => false
                )
            )
        )
        [1] => SimpleXMLElement Object
            [@attributes] => Array (
                [item-id] => BBB
            )
            [locations] => SimpleXMLElement Object (
                [location] => SimpleXMLElement Object (
                    [@attributes] => Array (
                        [location-id] => 111
                    )
                    [quantity] => 1
                    [pick-up-now-eligible] => false
                )
            )
        )
    )
) 

Может ли кто-нибудь вмешаться? ТИА !!

Ответы [ 2 ]

2 голосов
/ 18 июня 2011

это было бы

$xml->item[0]->attributes('item-id');
$xml->item[0]->locations->location->attributes('item-id');
1 голос
/ 18 июня 2011

Для доступа к атрибутам в SimpleXML можно использовать синтаксис в стиле массива.

$element['attribute_name'];

Также доступен метод SimpleXMLElement::attributes(). Выше будет:

$element->attributes()->attribute_name;

Если атрибут имеет пространство имен (например, blah:attribute_name), то вы можете предоставить это пространство имен (в качестве префикса или URI) методу attributes().

$element->attributes('blah', TRUE)->attribute_name;
$element->attributes('http://example.org/blah')->attribute_name;

Для получения дополнительной информации см. Справочную страницу SimpleXML Basic .


Чтобы применить вышесказанное на практике для этого отдельного вопроса, чтобы напечатать атрибут item-id второго элемента <item>, вы можете использовать:

echo $xml->item[1]['item-id'];

Пример ниже перебирает элементы <item> и печатает связанные с ними значения item-id и (первое) location-id.

foreach ($xml->item as $item) {
    $location = $item->locations->location;
    echo 'Item ID: ' . $item['item-id'] . "\n";
    echo 'Locations: ' . $location['location-id'] . "\n";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...